34590 lines
2.0 MiB
34590 lines
2.0 MiB
// Copyright (C) 2018 The Android Open Source Project
|
|
// Copyright (C) 2018 Google Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
// Autogenerated module VkDecoder
|
|
//
|
|
// (impl) generated by registry/vulkan/scripts/genvk.py -registry registry/vulkan/xml/vk.xml cereal
|
|
// -o ../../device/generic/vulkan-cereal/stream-servers/vulkan/cereal
|
|
//
|
|
// Please do not modify directly;
|
|
// re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
|
|
// or directly from Python by defining:
|
|
// VULKAN_REGISTRY_XML_DIR : Directory containing vk.xml
|
|
// VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
|
|
// CEREAL_OUTPUT_DIR: Where to put the generated sources.
|
|
//
|
|
// python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o
|
|
// $CEREAL_OUTPUT_DIR
|
|
//
|
|
|
|
#include "VkDecoder.h"
|
|
|
|
#include <functional>
|
|
#include <optional>
|
|
#include <unordered_map>
|
|
|
|
#include "VkDecoderGlobalState.h"
|
|
#include "VkDecoderSnapshot.h"
|
|
#include "VulkanDispatch.h"
|
|
#include "VulkanStream.h"
|
|
#include "aemu/base/BumpPool.h"
|
|
#include "aemu/base/Metrics.h"
|
|
#include "aemu/base/Tracing.h"
|
|
#include "aemu/base/system/System.h"
|
|
#include "common/goldfish_vk_marshaling.h"
|
|
#include "common/goldfish_vk_private_defs.h"
|
|
#include "common/goldfish_vk_reserved_marshaling.h"
|
|
#include "common/goldfish_vk_transform.h"
|
|
#include "host-common/GfxstreamFatalError.h"
|
|
#include "host-common/feature_control.h"
|
|
#include "host-common/logging.h"
|
|
#include "stream-servers/FrameBuffer.h"
|
|
#include "stream-servers/IOStream.h"
|
|
|
|
#define MAX_PACKET_LENGTH (400 * 1024 * 1024) // 400MB
|
|
|
|
namespace gfxstream {
|
|
namespace vk {
|
|
|
|
using android::base::MetricEventBadPacketLength;
|
|
using android::base::MetricEventDuplicateSequenceNum;
|
|
|
|
class VkDecoder::Impl {
|
|
public:
|
|
Impl()
|
|
: m_logCalls(android::base::getEnvironmentVariable("ANDROID_EMU_VK_LOG_CALLS") == "1"),
|
|
m_vk(vkDispatch()),
|
|
m_state(VkDecoderGlobalState::get()),
|
|
m_boxedHandleUnwrapMapping(m_state),
|
|
m_boxedHandleCreateMapping(m_state),
|
|
m_boxedHandleDestroyMapping(m_state),
|
|
m_boxedHandleUnwrapAndDeleteMapping(m_state),
|
|
m_boxedHandleUnwrapAndDeletePreserveBoxedMapping(m_state),
|
|
m_prevSeqno(std::nullopt) {}
|
|
VulkanStream* stream() { return &m_vkStream; }
|
|
VulkanMemReadingStream* readStream() { return &m_vkMemReadingStream; }
|
|
|
|
void setForSnapshotLoad(bool forSnapshotLoad) { m_forSnapshotLoad = forSnapshotLoad; }
|
|
|
|
size_t decode(void* buf, size_t bufsize, IOStream* stream,
|
|
const ProcessResources* processResources, const VkDecoderContext&);
|
|
|
|
private:
|
|
bool m_logCalls;
|
|
bool m_forSnapshotLoad = false;
|
|
VulkanDispatch* m_vk;
|
|
VkDecoderGlobalState* m_state;
|
|
VulkanStream m_vkStream{nullptr};
|
|
VulkanMemReadingStream m_vkMemReadingStream{nullptr};
|
|
BoxedHandleUnwrapMapping m_boxedHandleUnwrapMapping;
|
|
BoxedHandleCreateMapping m_boxedHandleCreateMapping;
|
|
BoxedHandleDestroyMapping m_boxedHandleDestroyMapping;
|
|
BoxedHandleUnwrapAndDeleteMapping m_boxedHandleUnwrapAndDeleteMapping;
|
|
android::base::BumpPool m_pool;
|
|
BoxedHandleUnwrapAndDeletePreserveBoxedMapping m_boxedHandleUnwrapAndDeletePreserveBoxedMapping;
|
|
std::optional<uint32_t> m_prevSeqno;
|
|
};
|
|
|
|
VkDecoder::VkDecoder() : mImpl(new VkDecoder::Impl()) {}
|
|
|
|
VkDecoder::~VkDecoder() = default;
|
|
|
|
void VkDecoder::setForSnapshotLoad(bool forSnapshotLoad) {
|
|
mImpl->setForSnapshotLoad(forSnapshotLoad);
|
|
}
|
|
|
|
size_t VkDecoder::decode(void* buf, size_t bufsize, IOStream* stream,
|
|
const ProcessResources* processResources,
|
|
const VkDecoderContext& context) {
|
|
return mImpl->decode(buf, bufsize, stream, processResources, context);
|
|
}
|
|
|
|
// VkDecoder::Impl::decode to follow
|
|
|
|
size_t VkDecoder::Impl::decode(void* buf, size_t len, IOStream* ioStream,
|
|
const ProcessResources* processResources,
|
|
const VkDecoderContext& context) {
|
|
const char* processName = context.processName;
|
|
auto& gfx_logger = *context.gfxApiLogger;
|
|
auto* healthMonitor = context.healthMonitor;
|
|
auto& metricsLogger = *context.metricsLogger;
|
|
if (len < 8) return 0;
|
|
bool queueSubmitWithCommandsEnabled =
|
|
feature_is_enabled(kFeature_VulkanQueueSubmitWithCommands);
|
|
unsigned char* ptr = (unsigned char*)buf;
|
|
const unsigned char* const end = (const unsigned char*)buf + len;
|
|
if (m_forSnapshotLoad) {
|
|
ptr += m_state->setCreatedHandlesForSnapshotLoad(ptr);
|
|
}
|
|
while (end - ptr >= 8) {
|
|
uint32_t opcode = *(uint32_t*)ptr;
|
|
uint32_t packetLen = *(uint32_t*)(ptr + 4);
|
|
|
|
// packetLen should be at least 8 (op code and packet length) and should not be excessively
|
|
// large
|
|
if (packetLen < 8 || packetLen > MAX_PACKET_LENGTH) {
|
|
WARN("Bad packet length %d detected, decode may fail", packetLen);
|
|
metricsLogger.logMetricEvent(MetricEventBadPacketLength{.len = packetLen});
|
|
}
|
|
|
|
if (end - ptr < packetLen) return ptr - (unsigned char*)buf;
|
|
gfx_logger.record(ptr, std::min(size_t(packetLen + 8), size_t(end - ptr)));
|
|
stream()->setStream(ioStream);
|
|
VulkanStream* vkStream = stream();
|
|
VulkanMemReadingStream* vkReadStream = readStream();
|
|
vkReadStream->setBuf((uint8_t*)(ptr + 8));
|
|
uint8_t* readStreamPtr = vkReadStream->getBuf();
|
|
uint8_t** readStreamPtrPtr = &readStreamPtr;
|
|
uint8_t* snapshotTraceBegin = vkReadStream->beginTrace();
|
|
vkReadStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
|
|
std::unique_ptr<EventHangMetadata::HangAnnotations> executionData =
|
|
std::make_unique<EventHangMetadata::HangAnnotations>();
|
|
if (healthMonitor) {
|
|
executionData->insert(
|
|
{{"packet_length", std::to_string(packetLen)}, {"opcode", std::to_string(opcode)}});
|
|
if (processName) {
|
|
executionData->insert({{"renderthread_guest_process", std::string(processName)}});
|
|
}
|
|
if (m_prevSeqno) {
|
|
executionData->insert({{"previous_seqno", std::to_string(m_prevSeqno.value())}});
|
|
}
|
|
}
|
|
|
|
std::atomic<uint32_t>* seqnoPtr = processResources->getSequenceNumberPtr();
|
|
|
|
if (queueSubmitWithCommandsEnabled &&
|
|
((opcode >= OP_vkFirst && opcode < OP_vkLast) ||
|
|
(opcode >= OP_vkFirst_old && opcode < OP_vkLast_old))) {
|
|
uint32_t seqno;
|
|
memcpy(&seqno, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (healthMonitor) executionData->insert({{"seqno", std::to_string(seqno)}});
|
|
if (m_prevSeqno && seqno == m_prevSeqno.value()) {
|
|
WARN(
|
|
"Seqno %d is the same as previously processed on thread %d. It might be a "
|
|
"duplicate command.",
|
|
seqno, getCurrentThreadId());
|
|
metricsLogger.logMetricEvent(MetricEventDuplicateSequenceNum{.opcode = opcode});
|
|
}
|
|
if (seqnoPtr && !m_forSnapshotLoad) {
|
|
{
|
|
auto seqnoWatchdog =
|
|
WATCHDOG_BUILDER(healthMonitor, "RenderThread seqno loop")
|
|
.setHangType(EventHangMetadata::HangType::kRenderThread)
|
|
.setAnnotations(std::make_unique<EventHangMetadata::HangAnnotations>(
|
|
*executionData))
|
|
/* Data gathered if this hangs*/
|
|
.setOnHangCallback([=]() {
|
|
auto annotations =
|
|
std::make_unique<EventHangMetadata::HangAnnotations>();
|
|
annotations->insert(
|
|
{{"seqnoPtr",
|
|
std::to_string(seqnoPtr->load(std::memory_order_seq_cst))}});
|
|
return annotations;
|
|
})
|
|
.build();
|
|
while ((seqno - seqnoPtr->load(std::memory_order_seq_cst) != 1)) {
|
|
#if (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)))
|
|
_mm_pause();
|
|
#elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))
|
|
__asm__ __volatile__("pause;");
|
|
#endif
|
|
}
|
|
m_prevSeqno = seqno;
|
|
}
|
|
}
|
|
}
|
|
|
|
gfx_logger.recordCommandExecution();
|
|
|
|
auto executionWatchdog =
|
|
WATCHDOG_BUILDER(healthMonitor, "RenderThread VkDecoder command execution")
|
|
.setHangType(EventHangMetadata::HangType::kRenderThread)
|
|
.setAnnotations(std::move(executionData))
|
|
.build();
|
|
|
|
auto vk = m_vk;
|
|
switch (opcode) {
|
|
#ifdef VK_VERSION_1_0
|
|
case OP_vkCreateInstance: {
|
|
android::base::beginTrace("vkCreateInstance decode");
|
|
const VkInstanceCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkInstance* pInstance;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkInstanceCreateInfo));
|
|
reservedunmarshal_VkInstanceCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkInstanceCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pInstance;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pInstance, sizeof(VkInstance));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkInstance*)pInstance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_1));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkInstanceCreateInfo(m_state,
|
|
(VkInstanceCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCreateInstance 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pInstance);
|
|
}
|
|
VkResult vkCreateInstance_VkResult_return = (VkResult)0;
|
|
vkCreateInstance_VkResult_return =
|
|
m_state->on_vkCreateInstance(&m_pool, pCreateInfo, pAllocator, pInstance);
|
|
if ((vkCreateInstance_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateInstance_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_2;
|
|
static_assert(8 == sizeof(VkInstance),
|
|
"handle map overwrite requires VkInstance to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkInstance((VkInstance*)pInstance, 1);
|
|
vkStream->write((VkInstance*)pInstance, 8 * 1);
|
|
vkStream->write(&vkCreateInstance_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateInstance(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkCreateInstance_VkResult_return,
|
|
pCreateInfo, pAllocator, pInstance);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyInstance: {
|
|
android::base::beginTrace("vkDestroyInstance decode");
|
|
VkInstance instance;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyInstance 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)instance, (unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyInstance(&m_pool, instance, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyInstance(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, instance, pAllocator);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkEnumeratePhysicalDevices: {
|
|
android::base::beginTrace("vkEnumeratePhysicalDevices decode");
|
|
VkInstance instance;
|
|
uint32_t* pPhysicalDeviceCount;
|
|
VkPhysicalDevice* pPhysicalDevices;
|
|
// Begin global wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pPhysicalDeviceCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPhysicalDeviceCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPhysicalDeviceCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPhysicalDeviceCount) {
|
|
vkReadStream->alloc((void**)&pPhysicalDeviceCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPhysicalDeviceCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPhysicalDevices;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPhysicalDevice**)&pPhysicalDevices, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPhysicalDevices);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPhysicalDevices) {
|
|
vkReadStream->alloc((void**)&pPhysicalDevices,
|
|
(*(pPhysicalDeviceCount)) * sizeof(VkPhysicalDevice));
|
|
if ((*(pPhysicalDeviceCount))) {
|
|
uint8_t* cgen_var_2_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * (*(pPhysicalDeviceCount));
|
|
if (pPhysicalDeviceCount) {
|
|
for (uint32_t k = 0; k < (*(pPhysicalDeviceCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_2_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkPhysicalDevice*)pPhysicalDevices) + k) =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)tmpval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkEnumeratePhysicalDevices 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance,
|
|
(unsigned long long)pPhysicalDeviceCount,
|
|
(unsigned long long)pPhysicalDevices);
|
|
}
|
|
VkResult vkEnumeratePhysicalDevices_VkResult_return = (VkResult)0;
|
|
vkEnumeratePhysicalDevices_VkResult_return = m_state->on_vkEnumeratePhysicalDevices(
|
|
&m_pool, instance, pPhysicalDeviceCount, pPhysicalDevices);
|
|
if ((vkEnumeratePhysicalDevices_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkEnumeratePhysicalDevices_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPhysicalDeviceCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPhysicalDeviceCount) {
|
|
vkStream->write((uint32_t*)pPhysicalDeviceCount, sizeof(uint32_t));
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pPhysicalDevices;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pPhysicalDevices) {
|
|
if ((*(pPhysicalDeviceCount))) {
|
|
uint64_t* cgen_var_4_0;
|
|
vkStream->alloc((void**)&cgen_var_4_0, (*(pPhysicalDeviceCount)) * 8);
|
|
static_assert(
|
|
8 == sizeof(VkPhysicalDevice),
|
|
"handle map overwrite requires VkPhysicalDevice to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkPhysicalDevice(
|
|
(VkPhysicalDevice*)pPhysicalDevices, (*(pPhysicalDeviceCount)));
|
|
vkStream->write((VkPhysicalDevice*)pPhysicalDevices,
|
|
8 * (*(pPhysicalDeviceCount)));
|
|
}
|
|
}
|
|
vkStream->write(&vkEnumeratePhysicalDevices_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEnumeratePhysicalDevices(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEnumeratePhysicalDevices_VkResult_return, instance, pPhysicalDeviceCount,
|
|
pPhysicalDevices);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceFeatures: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceFeatures decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkPhysicalDeviceFeatures* pFeatures;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pFeatures;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFeatures, sizeof(VkPhysicalDeviceFeatures));
|
|
reservedunmarshal_VkPhysicalDeviceFeatures(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceFeatures*)(pFeatures),
|
|
readStreamPtrPtr);
|
|
if (pFeatures) {
|
|
transform_tohost_VkPhysicalDeviceFeatures(
|
|
m_state, (VkPhysicalDeviceFeatures*)(pFeatures));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetPhysicalDeviceFeatures 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pFeatures);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceFeatures(&m_pool, physicalDevice, pFeatures);
|
|
vkStream->unsetHandleMapping();
|
|
if (pFeatures) {
|
|
transform_fromhost_VkPhysicalDeviceFeatures(
|
|
m_state, (VkPhysicalDeviceFeatures*)(pFeatures));
|
|
}
|
|
marshal_VkPhysicalDeviceFeatures(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceFeatures*)(pFeatures));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceFeatures(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice, pFeatures);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceFormatProperties: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceFormatProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkFormat format;
|
|
VkFormatProperties* pFormatProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
memcpy((VkFormat*)&format, *readStreamPtrPtr, sizeof(VkFormat));
|
|
*readStreamPtrPtr += sizeof(VkFormat);
|
|
// Begin manual dispatchable handle unboxing for pFormatProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFormatProperties, sizeof(VkFormatProperties));
|
|
reservedunmarshal_VkFormatProperties(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFormatProperties*)(pFormatProperties),
|
|
readStreamPtrPtr);
|
|
if (pFormatProperties) {
|
|
transform_tohost_VkFormatProperties(m_state,
|
|
(VkFormatProperties*)(pFormatProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceFormatProperties 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)format, (unsigned long long)pFormatProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceFormatProperties(&m_pool, physicalDevice, format,
|
|
pFormatProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pFormatProperties) {
|
|
transform_fromhost_VkFormatProperties(m_state,
|
|
(VkFormatProperties*)(pFormatProperties));
|
|
}
|
|
marshal_VkFormatProperties(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFormatProperties*)(pFormatProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceFormatProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice, format,
|
|
pFormatProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceImageFormatProperties: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceImageFormatProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkFormat format;
|
|
VkImageType type;
|
|
VkImageTiling tiling;
|
|
VkImageUsageFlags usage;
|
|
VkImageCreateFlags flags;
|
|
VkImageFormatProperties* pImageFormatProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
memcpy((VkFormat*)&format, *readStreamPtrPtr, sizeof(VkFormat));
|
|
*readStreamPtrPtr += sizeof(VkFormat);
|
|
memcpy((VkImageType*)&type, *readStreamPtrPtr, sizeof(VkImageType));
|
|
*readStreamPtrPtr += sizeof(VkImageType);
|
|
memcpy((VkImageTiling*)&tiling, *readStreamPtrPtr, sizeof(VkImageTiling));
|
|
*readStreamPtrPtr += sizeof(VkImageTiling);
|
|
memcpy((VkImageUsageFlags*)&usage, *readStreamPtrPtr, sizeof(VkImageUsageFlags));
|
|
*readStreamPtrPtr += sizeof(VkImageUsageFlags);
|
|
memcpy((VkImageCreateFlags*)&flags, *readStreamPtrPtr, sizeof(VkImageCreateFlags));
|
|
*readStreamPtrPtr += sizeof(VkImageCreateFlags);
|
|
// Begin manual dispatchable handle unboxing for pImageFormatProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pImageFormatProperties,
|
|
sizeof(VkImageFormatProperties));
|
|
reservedunmarshal_VkImageFormatProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageFormatProperties*)(pImageFormatProperties), readStreamPtrPtr);
|
|
if (pImageFormatProperties) {
|
|
transform_tohost_VkImageFormatProperties(
|
|
m_state, (VkImageFormatProperties*)(pImageFormatProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceImageFormatProperties 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)format, (unsigned long long)type,
|
|
(unsigned long long)tiling, (unsigned long long)usage,
|
|
(unsigned long long)flags, (unsigned long long)pImageFormatProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceImageFormatProperties_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceImageFormatProperties_VkResult_return =
|
|
m_state->on_vkGetPhysicalDeviceImageFormatProperties(
|
|
&m_pool, physicalDevice, format, type, tiling, usage, flags,
|
|
pImageFormatProperties);
|
|
if ((vkGetPhysicalDeviceImageFormatProperties_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceImageFormatProperties_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pImageFormatProperties) {
|
|
transform_fromhost_VkImageFormatProperties(
|
|
m_state, (VkImageFormatProperties*)(pImageFormatProperties));
|
|
}
|
|
marshal_VkImageFormatProperties(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageFormatProperties*)(pImageFormatProperties));
|
|
vkStream->write(&vkGetPhysicalDeviceImageFormatProperties_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceImageFormatProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceImageFormatProperties_VkResult_return, physicalDevice,
|
|
format, type, tiling, usage, flags, pImageFormatProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceProperties: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkPhysicalDeviceProperties* pProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pProperties, sizeof(VkPhysicalDeviceProperties));
|
|
reservedunmarshal_VkPhysicalDeviceProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceProperties*)(pProperties), readStreamPtrPtr);
|
|
if (pProperties) {
|
|
transform_tohost_VkPhysicalDeviceProperties(
|
|
m_state, (VkPhysicalDeviceProperties*)(pProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceProperties 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceProperties(&m_pool, physicalDevice, pProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pProperties) {
|
|
transform_fromhost_VkPhysicalDeviceProperties(
|
|
m_state, (VkPhysicalDeviceProperties*)(pProperties));
|
|
}
|
|
marshal_VkPhysicalDeviceProperties(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceProperties*)(pProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceProperties(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
physicalDevice, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceQueueFamilyProperties: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceQueueFamilyProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pQueueFamilyPropertyCount;
|
|
VkQueueFamilyProperties* pQueueFamilyProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pQueueFamilyPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pQueueFamilyPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pQueueFamilyPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pQueueFamilyPropertyCount) {
|
|
vkReadStream->alloc((void**)&pQueueFamilyPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pQueueFamilyPropertyCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pQueueFamilyProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkQueueFamilyProperties**)&pQueueFamilyProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pQueueFamilyProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pQueueFamilyProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pQueueFamilyProperties,
|
|
(*(pQueueFamilyPropertyCount)) * sizeof(VkQueueFamilyProperties));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
reservedunmarshal_VkQueueFamilyProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkQueueFamilyProperties*)(pQueueFamilyProperties + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pQueueFamilyPropertyCount) {
|
|
if (pQueueFamilyProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
transform_tohost_VkQueueFamilyProperties(
|
|
m_state, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceQueueFamilyProperties 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pQueueFamilyPropertyCount,
|
|
(unsigned long long)pQueueFamilyProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceQueueFamilyProperties(
|
|
unboxed_physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pQueueFamilyPropertyCount) {
|
|
vkStream->write((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pQueueFamilyPropertyCount) {
|
|
if (pQueueFamilyProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
transform_fromhost_VkQueueFamilyProperties(
|
|
m_state, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pQueueFamilyProperties) {
|
|
if (pQueueFamilyPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
marshal_VkQueueFamilyProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceQueueFamilyProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pQueueFamilyPropertyCount, pQueueFamilyProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceMemoryProperties: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceMemoryProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkPhysicalDeviceMemoryProperties* pMemoryProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pMemoryProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryProperties,
|
|
sizeof(VkPhysicalDeviceMemoryProperties));
|
|
reservedunmarshal_VkPhysicalDeviceMemoryProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceMemoryProperties*)(pMemoryProperties), readStreamPtrPtr);
|
|
if (pMemoryProperties) {
|
|
transform_tohost_VkPhysicalDeviceMemoryProperties(
|
|
m_state, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceMemoryProperties 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pMemoryProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceMemoryProperties(&m_pool, physicalDevice,
|
|
pMemoryProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryProperties) {
|
|
transform_fromhost_VkPhysicalDeviceMemoryProperties(
|
|
m_state, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
|
|
}
|
|
marshal_VkPhysicalDeviceMemoryProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceMemoryProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pMemoryProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetInstanceProcAddr: {
|
|
android::base::beginTrace("vkGetInstanceProcAddr decode");
|
|
VkInstance instance;
|
|
const char* pName;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->loadStringInPlaceWithStreamPtr((char**)&pName, readStreamPtrPtr);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetInstanceProcAddr 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pName);
|
|
}
|
|
PFN_vkVoidFunction vkGetInstanceProcAddr_PFN_vkVoidFunction_return =
|
|
(PFN_vkVoidFunction)0;
|
|
vkGetInstanceProcAddr_PFN_vkVoidFunction_return =
|
|
vk->vkGetInstanceProcAddr(unboxed_instance, pName);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetInstanceProcAddr_PFN_vkVoidFunction_return,
|
|
sizeof(PFN_vkVoidFunction));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetInstanceProcAddr(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetInstanceProcAddr_PFN_vkVoidFunction_return, instance, pName);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceProcAddr: {
|
|
android::base::beginTrace("vkGetDeviceProcAddr decode");
|
|
VkDevice device;
|
|
const char* pName;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->loadStringInPlaceWithStreamPtr((char**)&pName, readStreamPtrPtr);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetDeviceProcAddr 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pName);
|
|
}
|
|
PFN_vkVoidFunction vkGetDeviceProcAddr_PFN_vkVoidFunction_return =
|
|
(PFN_vkVoidFunction)0;
|
|
vkGetDeviceProcAddr_PFN_vkVoidFunction_return =
|
|
vk->vkGetDeviceProcAddr(unboxed_device, pName);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetDeviceProcAddr_PFN_vkVoidFunction_return,
|
|
sizeof(PFN_vkVoidFunction));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceProcAddr(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDeviceProcAddr_PFN_vkVoidFunction_return, device, pName);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateDevice: {
|
|
android::base::beginTrace("vkCreateDevice decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkDeviceCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDevice* pDevice;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkDeviceCreateInfo));
|
|
reservedunmarshal_VkDeviceCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pDevice;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDevice, sizeof(VkDevice));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDevice*)pDevice = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDeviceCreateInfo(m_state,
|
|
(VkDeviceCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCreateDevice 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pCreateInfo, (unsigned long long)pAllocator,
|
|
(unsigned long long)pDevice);
|
|
}
|
|
VkResult vkCreateDevice_VkResult_return = (VkResult)0;
|
|
vkCreateDevice_VkResult_return = m_state->on_vkCreateDevice(
|
|
&m_pool, physicalDevice, pCreateInfo, pAllocator, pDevice);
|
|
if ((vkCreateDevice_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDevice_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkDevice),
|
|
"handle map overwrite requires VkDevice to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDevice((VkDevice*)pDevice, 1);
|
|
vkStream->write((VkDevice*)pDevice, 8 * 1);
|
|
vkStream->write(&vkCreateDevice_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDevice(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkCreateDevice_VkResult_return,
|
|
physicalDevice, pCreateInfo, pAllocator,
|
|
pDevice);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyDevice: {
|
|
android::base::beginTrace("vkDestroyDevice decode");
|
|
VkDevice device;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyDevice 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)device, (unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyDevice(&m_pool, device, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyDevice(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, pAllocator);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkEnumerateInstanceExtensionProperties: {
|
|
android::base::beginTrace("vkEnumerateInstanceExtensionProperties decode");
|
|
const char* pLayerName;
|
|
uint32_t* pPropertyCount;
|
|
VkExtensionProperties* pProperties;
|
|
if (vkReadStream->getFeatureBits() &
|
|
VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT) {
|
|
// WARNING PTR CHECK
|
|
memcpy((char**)&pLayerName, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pLayerName);
|
|
*readStreamPtrPtr += 8;
|
|
if (pLayerName) {
|
|
vkReadStream->loadStringInPlaceWithStreamPtr((char**)&pLayerName,
|
|
readStreamPtrPtr);
|
|
}
|
|
} else {
|
|
vkReadStream->loadStringInPlaceWithStreamPtr((char**)&pLayerName,
|
|
readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkExtensionProperties**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkExtensionProperties));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkExtensionProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExtensionProperties*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkExtensionProperties(
|
|
m_state, (VkExtensionProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkEnumerateInstanceExtensionProperties 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)pLayerName,
|
|
(unsigned long long)pPropertyCount, (unsigned long long)pProperties);
|
|
}
|
|
VkResult vkEnumerateInstanceExtensionProperties_VkResult_return = (VkResult)0;
|
|
vkEnumerateInstanceExtensionProperties_VkResult_return =
|
|
vk->vkEnumerateInstanceExtensionProperties(pLayerName, pPropertyCount,
|
|
pProperties);
|
|
if ((vkEnumerateInstanceExtensionProperties_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkEnumerateInstanceExtensionProperties_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_2);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkExtensionProperties(
|
|
m_state, (VkExtensionProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkExtensionProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExtensionProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkEnumerateInstanceExtensionProperties_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEnumerateInstanceExtensionProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEnumerateInstanceExtensionProperties_VkResult_return, pLayerName,
|
|
pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkEnumerateDeviceExtensionProperties: {
|
|
android::base::beginTrace("vkEnumerateDeviceExtensionProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const char* pLayerName;
|
|
uint32_t* pPropertyCount;
|
|
VkExtensionProperties* pProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
if (vkReadStream->getFeatureBits() &
|
|
VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT) {
|
|
// WARNING PTR CHECK
|
|
memcpy((char**)&pLayerName, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pLayerName);
|
|
*readStreamPtrPtr += 8;
|
|
if (pLayerName) {
|
|
vkReadStream->loadStringInPlaceWithStreamPtr((char**)&pLayerName,
|
|
readStreamPtrPtr);
|
|
}
|
|
} else {
|
|
vkReadStream->loadStringInPlaceWithStreamPtr((char**)&pLayerName,
|
|
readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkExtensionProperties**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkExtensionProperties));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkExtensionProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExtensionProperties*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkExtensionProperties(
|
|
m_state, (VkExtensionProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkEnumerateDeviceExtensionProperties 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pLayerName, (unsigned long long)pPropertyCount,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
VkResult vkEnumerateDeviceExtensionProperties_VkResult_return = (VkResult)0;
|
|
vkEnumerateDeviceExtensionProperties_VkResult_return =
|
|
m_state->on_vkEnumerateDeviceExtensionProperties(
|
|
&m_pool, physicalDevice, pLayerName, pPropertyCount, pProperties);
|
|
if ((vkEnumerateDeviceExtensionProperties_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkEnumerateDeviceExtensionProperties_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkExtensionProperties(
|
|
m_state, (VkExtensionProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkExtensionProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExtensionProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkEnumerateDeviceExtensionProperties_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEnumerateDeviceExtensionProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEnumerateDeviceExtensionProperties_VkResult_return, physicalDevice,
|
|
pLayerName, pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkEnumerateInstanceLayerProperties: {
|
|
android::base::beginTrace("vkEnumerateInstanceLayerProperties decode");
|
|
uint32_t* pPropertyCount;
|
|
VkLayerProperties* pProperties;
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkLayerProperties**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkLayerProperties));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkLayerProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkLayerProperties*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkLayerProperties(
|
|
m_state, (VkLayerProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkEnumerateInstanceLayerProperties 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)pPropertyCount,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
VkResult vkEnumerateInstanceLayerProperties_VkResult_return = (VkResult)0;
|
|
vkEnumerateInstanceLayerProperties_VkResult_return =
|
|
vk->vkEnumerateInstanceLayerProperties(pPropertyCount, pProperties);
|
|
if ((vkEnumerateInstanceLayerProperties_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkEnumerateInstanceLayerProperties_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_2);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkLayerProperties(
|
|
m_state, (VkLayerProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkLayerProperties(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkLayerProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkEnumerateInstanceLayerProperties_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEnumerateInstanceLayerProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEnumerateInstanceLayerProperties_VkResult_return, pPropertyCount,
|
|
pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkEnumerateDeviceLayerProperties: {
|
|
android::base::beginTrace("vkEnumerateDeviceLayerProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pPropertyCount;
|
|
VkLayerProperties* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkLayerProperties**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkLayerProperties));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkLayerProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkLayerProperties*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkLayerProperties(
|
|
m_state, (VkLayerProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkEnumerateDeviceLayerProperties 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pPropertyCount, (unsigned long long)pProperties);
|
|
}
|
|
VkResult vkEnumerateDeviceLayerProperties_VkResult_return = (VkResult)0;
|
|
vkEnumerateDeviceLayerProperties_VkResult_return =
|
|
vk->vkEnumerateDeviceLayerProperties(unboxed_physicalDevice, pPropertyCount,
|
|
pProperties);
|
|
if ((vkEnumerateDeviceLayerProperties_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkEnumerateDeviceLayerProperties_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkLayerProperties(
|
|
m_state, (VkLayerProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkLayerProperties(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkLayerProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkEnumerateDeviceLayerProperties_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEnumerateDeviceLayerProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEnumerateDeviceLayerProperties_VkResult_return, physicalDevice,
|
|
pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceQueue: {
|
|
android::base::beginTrace("vkGetDeviceQueue decode");
|
|
VkDevice device;
|
|
uint32_t queueFamilyIndex;
|
|
uint32_t queueIndex;
|
|
VkQueue* pQueue;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&queueFamilyIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&queueIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for pQueue;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pQueue, sizeof(VkQueue));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkQueue*)pQueue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr, "stream %p: call vkGetDeviceQueue 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)queueFamilyIndex,
|
|
(unsigned long long)queueIndex, (unsigned long long)pQueue);
|
|
}
|
|
m_state->on_vkGetDeviceQueue(&m_pool, device, queueFamilyIndex, queueIndex, pQueue);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_2;
|
|
static_assert(8 == sizeof(VkQueue),
|
|
"handle map overwrite requires VkQueue to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkQueue((VkQueue*)pQueue, 1);
|
|
vkStream->write((VkQueue*)pQueue, 8 * 1);
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceQueue(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, queueFamilyIndex,
|
|
queueIndex, pQueue);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueSubmit: {
|
|
android::base::beginTrace("vkQueueSubmit decode");
|
|
VkQueue queue;
|
|
uint32_t submitCount;
|
|
const VkSubmitInfo* pSubmits;
|
|
VkFence fence;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&submitCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pSubmits,
|
|
((submitCount)) * sizeof(const VkSubmitInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
|
|
reservedunmarshal_VkSubmitInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubmitInfo*)(pSubmits + i), readStreamPtrPtr);
|
|
}
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFence*)&fence = (VkFence)unbox_VkFence((VkFence)(*&cgen_var_1));
|
|
if (pSubmits) {
|
|
for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
|
|
transform_tohost_VkSubmitInfo(m_state, (VkSubmitInfo*)(pSubmits + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkQueueSubmit 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)submitCount,
|
|
(unsigned long long)pSubmits, (unsigned long long)fence);
|
|
}
|
|
VkResult vkQueueSubmit_VkResult_return = (VkResult)0;
|
|
vkQueueSubmit_VkResult_return =
|
|
m_state->on_vkQueueSubmit(&m_pool, queue, submitCount, pSubmits, fence);
|
|
if ((vkQueueSubmit_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkQueueSubmit_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkQueueSubmit_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueSubmit(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkQueueSubmit_VkResult_return,
|
|
queue, submitCount, pSubmits, fence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueWaitIdle: {
|
|
android::base::beginTrace("vkQueueWaitIdle decode");
|
|
VkQueue queue;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkQueueWaitIdle 0x%llx \n", ioStream,
|
|
(unsigned long long)queue);
|
|
}
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
VkResult vkQueueWaitIdle_VkResult_return = (VkResult)0;
|
|
vkQueueWaitIdle_VkResult_return = m_state->on_vkQueueWaitIdle(&m_pool, queue);
|
|
if ((vkQueueWaitIdle_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkQueueWaitIdle_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkQueueWaitIdle_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueWaitIdle(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkQueueWaitIdle_VkResult_return,
|
|
queue);
|
|
}
|
|
vkReadStream->clearPool();
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDeviceWaitIdle: {
|
|
android::base::beginTrace("vkDeviceWaitIdle decode");
|
|
VkDevice device;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDeviceWaitIdle 0x%llx \n", ioStream,
|
|
(unsigned long long)device);
|
|
}
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
VkResult vkDeviceWaitIdle_VkResult_return = (VkResult)0;
|
|
vkDeviceWaitIdle_VkResult_return = vk->vkDeviceWaitIdle(unboxed_device);
|
|
if ((vkDeviceWaitIdle_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkDeviceWaitIdle_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkDeviceWaitIdle_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDeviceWaitIdle(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkDeviceWaitIdle_VkResult_return,
|
|
device);
|
|
}
|
|
vkReadStream->clearPool();
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkAllocateMemory: {
|
|
android::base::beginTrace("vkAllocateMemory decode");
|
|
VkDevice device;
|
|
const VkMemoryAllocateInfo* pAllocateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDeviceMemory* pMemory;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pAllocateInfo, sizeof(const VkMemoryAllocateInfo));
|
|
reservedunmarshal_VkMemoryAllocateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryAllocateInfo*)(pAllocateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pMemory;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemory, sizeof(VkDeviceMemory));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDeviceMemory*)pMemory =
|
|
(VkDeviceMemory)(VkDeviceMemory)((VkDeviceMemory)(*&cgen_var_2));
|
|
if (pAllocateInfo) {
|
|
transform_tohost_VkMemoryAllocateInfo(m_state,
|
|
(VkMemoryAllocateInfo*)(pAllocateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAllocateMemory 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pAllocateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pMemory);
|
|
}
|
|
VkResult vkAllocateMemory_VkResult_return = (VkResult)0;
|
|
vkAllocateMemory_VkResult_return = m_state->on_vkAllocateMemory(
|
|
&m_pool, device, pAllocateInfo, pAllocator, pMemory);
|
|
if ((vkAllocateMemory_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkAllocateMemory_VkResult_return, opcode, context,
|
|
std::make_optional<uint64_t>(pAllocateInfo->allocationSize));
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pMemory;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkDeviceMemory),
|
|
"handle map overwrite requires VkDeviceMemory to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)pMemory, 1);
|
|
vkStream->write((VkDeviceMemory*)pMemory, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pMemory;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkAllocateMemory_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAllocateMemory(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkAllocateMemory_VkResult_return,
|
|
device, pAllocateInfo, pAllocator,
|
|
pMemory);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkFreeMemory: {
|
|
android::base::beginTrace("vkFreeMemory decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for memory;
|
|
VkDeviceMemory boxed_memory_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)(VkDeviceMemory)((VkDeviceMemory)(*&cgen_var_1));
|
|
boxed_memory_preserve = memory;
|
|
memory = unbox_VkDeviceMemory(memory);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkFreeMemory 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memory,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkFreeMemory(&m_pool, device, memory, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkFreeMemory(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, boxed_memory_preserve,
|
|
pAllocator);
|
|
}
|
|
delete_VkDeviceMemory(boxed_memory_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkMapMemory: {
|
|
android::base::beginTrace("vkMapMemory decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
VkDeviceSize offset;
|
|
VkDeviceSize size;
|
|
VkMemoryMapFlags flags;
|
|
void** ppData;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkDeviceSize*)&size, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkMemoryMapFlags*)&flags, *readStreamPtrPtr, sizeof(VkMemoryMapFlags));
|
|
*readStreamPtrPtr += sizeof(VkMemoryMapFlags);
|
|
// Begin manual dispatchable handle unboxing for ppData;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((void***)&ppData, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&ppData);
|
|
*readStreamPtrPtr += 8;
|
|
if (ppData) {
|
|
vkReadStream->alloc((void**)&ppData, sizeof(void*));
|
|
memcpy((void**)ppData, *readStreamPtrPtr, sizeof(void*));
|
|
*readStreamPtrPtr += sizeof(void*);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkMapMemory 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memory,
|
|
(unsigned long long)offset, (unsigned long long)size,
|
|
(unsigned long long)flags, (unsigned long long)ppData);
|
|
}
|
|
VkResult vkMapMemory_VkResult_return = (VkResult)0;
|
|
vkMapMemory_VkResult_return =
|
|
m_state->on_vkMapMemory(&m_pool, device, memory, offset, size, flags, ppData);
|
|
if ((vkMapMemory_VkResult_return) == VK_ERROR_DEVICE_LOST) m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkMapMemory_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)ppData;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (ppData) {
|
|
vkStream->write((void**)ppData, sizeof(void*));
|
|
}
|
|
vkStream->write(&vkMapMemory_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkMapMemory(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkMapMemory_VkResult_return, device,
|
|
memory, offset, size, flags, ppData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkUnmapMemory: {
|
|
android::base::beginTrace("vkUnmapMemory decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkUnmapMemory 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)device, (unsigned long long)memory);
|
|
}
|
|
m_state->on_vkUnmapMemory(&m_pool, device, memory);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkUnmapMemory(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, memory);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkFlushMappedMemoryRanges: {
|
|
android::base::beginTrace("vkFlushMappedMemoryRanges decode");
|
|
VkDevice device;
|
|
uint32_t memoryRangeCount;
|
|
const VkMappedMemoryRange* pMemoryRanges;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)&memoryRangeCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pMemoryRanges,
|
|
((memoryRangeCount)) * sizeof(const VkMappedMemoryRange));
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
|
|
reservedunmarshal_VkMappedMemoryRange(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMappedMemoryRange*)(pMemoryRanges + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pMemoryRanges) {
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
|
|
transform_tohost_VkMappedMemoryRange(
|
|
m_state, (VkMappedMemoryRange*)(pMemoryRanges + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr, "stream %p: call vkFlushMappedMemoryRanges 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memoryRangeCount,
|
|
(unsigned long long)pMemoryRanges);
|
|
}
|
|
if (!m_state->usingDirectMapping()) {
|
|
for (uint32_t i = 0; i < memoryRangeCount; ++i) {
|
|
auto range = pMemoryRanges[i];
|
|
auto memory = pMemoryRanges[i].memory;
|
|
auto size = pMemoryRanges[i].size;
|
|
auto offset = pMemoryRanges[i].offset;
|
|
uint64_t readStream = 0;
|
|
memcpy(&readStream, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
auto hostPtr = m_state->getMappedHostPointer(memory);
|
|
if (!hostPtr && readStream > 0)
|
|
GFXSTREAM_ABORT(::emugl::FatalError(::emugl::ABORT_REASON_OTHER));
|
|
if (!hostPtr) continue;
|
|
uint8_t* targetRange = hostPtr + offset;
|
|
memcpy(targetRange, *readStreamPtrPtr, readStream);
|
|
*readStreamPtrPtr += readStream;
|
|
}
|
|
}
|
|
VkResult vkFlushMappedMemoryRanges_VkResult_return = (VkResult)0;
|
|
vkFlushMappedMemoryRanges_VkResult_return =
|
|
vk->vkFlushMappedMemoryRanges(unboxed_device, memoryRangeCount, pMemoryRanges);
|
|
if ((vkFlushMappedMemoryRanges_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkFlushMappedMemoryRanges_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkFlushMappedMemoryRanges_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkFlushMappedMemoryRanges(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkFlushMappedMemoryRanges_VkResult_return, device, memoryRangeCount,
|
|
pMemoryRanges);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkInvalidateMappedMemoryRanges: {
|
|
android::base::beginTrace("vkInvalidateMappedMemoryRanges decode");
|
|
VkDevice device;
|
|
uint32_t memoryRangeCount;
|
|
const VkMappedMemoryRange* pMemoryRanges;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)&memoryRangeCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pMemoryRanges,
|
|
((memoryRangeCount)) * sizeof(const VkMappedMemoryRange));
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
|
|
reservedunmarshal_VkMappedMemoryRange(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMappedMemoryRange*)(pMemoryRanges + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pMemoryRanges) {
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
|
|
transform_tohost_VkMappedMemoryRange(
|
|
m_state, (VkMappedMemoryRange*)(pMemoryRanges + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkInvalidateMappedMemoryRanges 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memoryRangeCount,
|
|
(unsigned long long)pMemoryRanges);
|
|
}
|
|
VkResult vkInvalidateMappedMemoryRanges_VkResult_return = (VkResult)0;
|
|
vkInvalidateMappedMemoryRanges_VkResult_return = vk->vkInvalidateMappedMemoryRanges(
|
|
unboxed_device, memoryRangeCount, pMemoryRanges);
|
|
if ((vkInvalidateMappedMemoryRanges_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkInvalidateMappedMemoryRanges_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkInvalidateMappedMemoryRanges_VkResult_return, sizeof(VkResult));
|
|
if (!m_state->usingDirectMapping()) {
|
|
for (uint32_t i = 0; i < memoryRangeCount; ++i) {
|
|
auto range = pMemoryRanges[i];
|
|
auto memory = range.memory;
|
|
auto size = range.size;
|
|
auto offset = range.offset;
|
|
auto hostPtr = m_state->getMappedHostPointer(memory);
|
|
auto actualSize =
|
|
size == VK_WHOLE_SIZE ? m_state->getDeviceMemorySize(memory) : size;
|
|
uint64_t writeStream = 0;
|
|
if (!hostPtr) {
|
|
vkStream->write(&writeStream, sizeof(uint64_t));
|
|
continue;
|
|
};
|
|
uint8_t* targetRange = hostPtr + offset;
|
|
writeStream = actualSize;
|
|
vkStream->write(&writeStream, sizeof(uint64_t));
|
|
vkStream->write(targetRange, actualSize);
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkInvalidateMappedMemoryRanges(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkInvalidateMappedMemoryRanges_VkResult_return, device, memoryRangeCount,
|
|
pMemoryRanges);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceMemoryCommitment: {
|
|
android::base::beginTrace("vkGetDeviceMemoryCommitment decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
VkDeviceSize* pCommittedMemoryInBytes;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pCommittedMemoryInBytes;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCommittedMemoryInBytes, sizeof(VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pCommittedMemoryInBytes, *readStreamPtrPtr,
|
|
sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceMemoryCommitment 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memory,
|
|
(unsigned long long)pCommittedMemoryInBytes);
|
|
}
|
|
vk->vkGetDeviceMemoryCommitment(unboxed_device, memory, pCommittedMemoryInBytes);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceMemoryCommitment(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, memory,
|
|
pCommittedMemoryInBytes);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBindBufferMemory: {
|
|
android::base::beginTrace("vkBindBufferMemory decode");
|
|
VkDevice device;
|
|
VkBuffer buffer;
|
|
VkDeviceMemory memory;
|
|
VkDeviceSize memoryOffset;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&memoryOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkBindBufferMemory 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)buffer,
|
|
(unsigned long long)memory, (unsigned long long)memoryOffset);
|
|
}
|
|
VkResult vkBindBufferMemory_VkResult_return = (VkResult)0;
|
|
vkBindBufferMemory_VkResult_return =
|
|
m_state->on_vkBindBufferMemory(&m_pool, device, buffer, memory, memoryOffset);
|
|
if ((vkBindBufferMemory_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBindBufferMemory_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBindBufferMemory_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBindBufferMemory(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBindBufferMemory_VkResult_return, device, buffer, memory, memoryOffset);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBindImageMemory: {
|
|
android::base::beginTrace("vkBindImageMemory decode");
|
|
VkDevice device;
|
|
VkImage image;
|
|
VkDeviceMemory memory;
|
|
VkDeviceSize memoryOffset;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&memoryOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkBindImageMemory 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)image,
|
|
(unsigned long long)memory, (unsigned long long)memoryOffset);
|
|
}
|
|
VkResult vkBindImageMemory_VkResult_return = (VkResult)0;
|
|
vkBindImageMemory_VkResult_return =
|
|
m_state->on_vkBindImageMemory(&m_pool, device, image, memory, memoryOffset);
|
|
if ((vkBindImageMemory_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBindImageMemory_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBindImageMemory_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBindImageMemory(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBindImageMemory_VkResult_return, device, image, memory, memoryOffset);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetBufferMemoryRequirements: {
|
|
android::base::beginTrace("vkGetBufferMemoryRequirements decode");
|
|
VkDevice device;
|
|
VkBuffer buffer;
|
|
VkMemoryRequirements* pMemoryRequirements;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements));
|
|
reservedunmarshal_VkMemoryRequirements(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements*)(pMemoryRequirements),
|
|
readStreamPtrPtr);
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements(
|
|
m_state, (VkMemoryRequirements*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetBufferMemoryRequirements 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)buffer,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
m_state->on_vkGetBufferMemoryRequirements(&m_pool, device, buffer,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements(
|
|
m_state, (VkMemoryRequirements*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBufferMemoryRequirements(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, buffer,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetImageMemoryRequirements: {
|
|
android::base::beginTrace("vkGetImageMemoryRequirements decode");
|
|
VkDevice device;
|
|
VkImage image;
|
|
VkMemoryRequirements* pMemoryRequirements;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements));
|
|
reservedunmarshal_VkMemoryRequirements(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements*)(pMemoryRequirements),
|
|
readStreamPtrPtr);
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements(
|
|
m_state, (VkMemoryRequirements*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetImageMemoryRequirements 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)image,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
m_state->on_vkGetImageMemoryRequirements(&m_pool, device, image,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements(
|
|
m_state, (VkMemoryRequirements*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageMemoryRequirements(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, image,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetImageSparseMemoryRequirements: {
|
|
android::base::beginTrace("vkGetImageSparseMemoryRequirements decode");
|
|
VkDevice device;
|
|
VkImage image;
|
|
uint32_t* pSparseMemoryRequirementCount;
|
|
VkSparseImageMemoryRequirements* pSparseMemoryRequirements;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pSparseMemoryRequirementCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pSparseMemoryRequirementCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSparseMemoryRequirementCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSparseMemoryRequirementCount) {
|
|
vkReadStream->alloc((void**)&pSparseMemoryRequirementCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pSparseMemoryRequirementCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSparseMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSparseImageMemoryRequirements**)&pSparseMemoryRequirements,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSparseMemoryRequirements);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSparseMemoryRequirements) {
|
|
vkReadStream->alloc((void**)&pSparseMemoryRequirements,
|
|
(*(pSparseMemoryRequirementCount)) *
|
|
sizeof(VkSparseImageMemoryRequirements));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
|
|
reservedunmarshal_VkSparseImageMemoryRequirements(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pSparseMemoryRequirementCount) {
|
|
if (pSparseMemoryRequirements) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
transform_tohost_VkSparseImageMemoryRequirements(
|
|
m_state,
|
|
(VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetImageSparseMemoryRequirements 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)image,
|
|
(unsigned long long)pSparseMemoryRequirementCount,
|
|
(unsigned long long)pSparseMemoryRequirements);
|
|
}
|
|
vk->vkGetImageSparseMemoryRequirements(unboxed_device, image,
|
|
pSparseMemoryRequirementCount,
|
|
pSparseMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pSparseMemoryRequirementCount) {
|
|
vkStream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
|
|
}
|
|
if (pSparseMemoryRequirementCount) {
|
|
if (pSparseMemoryRequirements) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
transform_fromhost_VkSparseImageMemoryRequirements(
|
|
m_state,
|
|
(VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pSparseMemoryRequirements) {
|
|
if (pSparseMemoryRequirementCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
marshal_VkSparseImageMemoryRequirements(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageSparseMemoryRequirements(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, image,
|
|
pSparseMemoryRequirementCount, pSparseMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceSparseImageFormatProperties: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSparseImageFormatProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkFormat format;
|
|
VkImageType type;
|
|
VkSampleCountFlagBits samples;
|
|
VkImageUsageFlags usage;
|
|
VkImageTiling tiling;
|
|
uint32_t* pPropertyCount;
|
|
VkSparseImageFormatProperties* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((VkFormat*)&format, *readStreamPtrPtr, sizeof(VkFormat));
|
|
*readStreamPtrPtr += sizeof(VkFormat);
|
|
memcpy((VkImageType*)&type, *readStreamPtrPtr, sizeof(VkImageType));
|
|
*readStreamPtrPtr += sizeof(VkImageType);
|
|
memcpy((VkSampleCountFlagBits*)&samples, *readStreamPtrPtr,
|
|
sizeof(VkSampleCountFlagBits));
|
|
*readStreamPtrPtr += sizeof(VkSampleCountFlagBits);
|
|
memcpy((VkImageUsageFlags*)&usage, *readStreamPtrPtr, sizeof(VkImageUsageFlags));
|
|
*readStreamPtrPtr += sizeof(VkImageUsageFlags);
|
|
memcpy((VkImageTiling*)&tiling, *readStreamPtrPtr, sizeof(VkImageTiling));
|
|
*readStreamPtrPtr += sizeof(VkImageTiling);
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSparseImageFormatProperties**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkSparseImageFormatProperties));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkSparseImageFormatProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageFormatProperties*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkSparseImageFormatProperties(
|
|
m_state, (VkSparseImageFormatProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSparseImageFormatProperties 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)format, (unsigned long long)type,
|
|
(unsigned long long)samples, (unsigned long long)usage,
|
|
(unsigned long long)tiling, (unsigned long long)pPropertyCount,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceSparseImageFormatProperties(unboxed_physicalDevice, format,
|
|
type, samples, usage, tiling,
|
|
pPropertyCount, pProperties);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkSparseImageFormatProperties(
|
|
m_state, (VkSparseImageFormatProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkSparseImageFormatProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageFormatProperties*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSparseImageFormatProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice, format,
|
|
type, samples, usage, tiling, pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueBindSparse: {
|
|
android::base::beginTrace("vkQueueBindSparse decode");
|
|
VkQueue queue;
|
|
uint32_t bindInfoCount;
|
|
const VkBindSparseInfo* pBindInfo;
|
|
VkFence fence;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&bindInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pBindInfo,
|
|
((bindInfoCount)) * sizeof(const VkBindSparseInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
reservedunmarshal_VkBindSparseInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBindSparseInfo*)(pBindInfo + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFence*)&fence = (VkFence)unbox_VkFence((VkFence)(*&cgen_var_1));
|
|
if (pBindInfo) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
transform_tohost_VkBindSparseInfo(m_state,
|
|
(VkBindSparseInfo*)(pBindInfo + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkQueueBindSparse 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)bindInfoCount,
|
|
(unsigned long long)pBindInfo, (unsigned long long)fence);
|
|
}
|
|
VkResult vkQueueBindSparse_VkResult_return = (VkResult)0;
|
|
vkQueueBindSparse_VkResult_return =
|
|
m_state->on_vkQueueBindSparse(&m_pool, queue, bindInfoCount, pBindInfo, fence);
|
|
if ((vkQueueBindSparse_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkQueueBindSparse_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkQueueBindSparse_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueBindSparse(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkQueueBindSparse_VkResult_return, queue, bindInfoCount, pBindInfo, fence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateFence: {
|
|
android::base::beginTrace("vkCreateFence decode");
|
|
VkDevice device;
|
|
const VkFenceCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkFence* pFence;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkFenceCreateInfo));
|
|
reservedunmarshal_VkFenceCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFenceCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pFence;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFence, sizeof(VkFence));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkFence*)pFence = (VkFence)(VkFence)((VkFence)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkFenceCreateInfo(m_state, (VkFenceCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCreateFence 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pFence);
|
|
}
|
|
VkResult vkCreateFence_VkResult_return = (VkResult)0;
|
|
vkCreateFence_VkResult_return =
|
|
m_state->on_vkCreateFence(&m_pool, device, pCreateInfo, pAllocator, pFence);
|
|
if ((vkCreateFence_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateFence_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pFence;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkFence),
|
|
"handle map overwrite requires VkFence to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkFence((VkFence*)pFence, 1);
|
|
vkStream->write((VkFence*)pFence, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pFence;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateFence_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateFence(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkCreateFence_VkResult_return,
|
|
device, pCreateInfo, pAllocator, pFence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyFence: {
|
|
android::base::beginTrace("vkDestroyFence decode");
|
|
VkDevice device;
|
|
VkFence fence;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for fence;
|
|
VkFence boxed_fence_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFence*)&fence = (VkFence)(VkFence)((VkFence)(*&cgen_var_1));
|
|
boxed_fence_preserve = fence;
|
|
fence = unbox_VkFence(fence);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyFence 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)fence,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyFence(&m_pool, device, fence, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyFence(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, boxed_fence_preserve,
|
|
pAllocator);
|
|
}
|
|
delete_VkFence(boxed_fence_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkResetFences: {
|
|
android::base::beginTrace("vkResetFences decode");
|
|
VkDevice device;
|
|
uint32_t fenceCount;
|
|
const VkFence* pFences;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&fenceCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pFences, ((fenceCount)) * sizeof(const VkFence));
|
|
if (((fenceCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((fenceCount));
|
|
for (uint32_t k = 0; k < ((fenceCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkFence*)pFences) + k) = (VkFence)unbox_VkFence((VkFence)tmpval);
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkResetFences 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)fenceCount,
|
|
(unsigned long long)pFences);
|
|
}
|
|
VkResult vkResetFences_VkResult_return = (VkResult)0;
|
|
vkResetFences_VkResult_return =
|
|
m_state->on_vkResetFences(&m_pool, device, fenceCount, pFences);
|
|
if ((vkResetFences_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkResetFences_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkResetFences_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkResetFences(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkResetFences_VkResult_return,
|
|
device, fenceCount, pFences);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetFenceStatus: {
|
|
android::base::beginTrace("vkGetFenceStatus decode");
|
|
VkDevice device;
|
|
VkFence fence;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFence*)&fence = (VkFence)unbox_VkFence((VkFence)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetFenceStatus 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)device, (unsigned long long)fence);
|
|
}
|
|
VkResult vkGetFenceStatus_VkResult_return = (VkResult)0;
|
|
vkGetFenceStatus_VkResult_return = vk->vkGetFenceStatus(unboxed_device, fence);
|
|
if ((vkGetFenceStatus_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetFenceStatus_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetFenceStatus_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetFenceStatus(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkGetFenceStatus_VkResult_return,
|
|
device, fence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkWaitForFences: {
|
|
android::base::beginTrace("vkWaitForFences decode");
|
|
VkDevice device;
|
|
uint32_t fenceCount;
|
|
const VkFence* pFences;
|
|
VkBool32 waitAll;
|
|
uint64_t timeout;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)&fenceCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pFences, ((fenceCount)) * sizeof(const VkFence));
|
|
if (((fenceCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((fenceCount));
|
|
for (uint32_t k = 0; k < ((fenceCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkFence*)pFences) + k) = (VkFence)unbox_VkFence((VkFence)tmpval);
|
|
}
|
|
}
|
|
memcpy((VkBool32*)&waitAll, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
memcpy((uint64_t*)&timeout, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkWaitForFences 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)fenceCount,
|
|
(unsigned long long)pFences, (unsigned long long)waitAll,
|
|
(unsigned long long)timeout);
|
|
}
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
VkResult vkWaitForFences_VkResult_return = (VkResult)0;
|
|
vkWaitForFences_VkResult_return =
|
|
vk->vkWaitForFences(unboxed_device, fenceCount, pFences, waitAll, timeout);
|
|
if ((vkWaitForFences_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkWaitForFences_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkWaitForFences_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkWaitForFences(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkWaitForFences_VkResult_return,
|
|
device, fenceCount, pFences, waitAll,
|
|
timeout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateSemaphore: {
|
|
android::base::beginTrace("vkCreateSemaphore decode");
|
|
VkDevice device;
|
|
const VkSemaphoreCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSemaphore* pSemaphore;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkSemaphoreCreateInfo));
|
|
reservedunmarshal_VkSemaphoreCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSemaphoreCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSemaphore;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSemaphore, sizeof(VkSemaphore));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSemaphore*)pSemaphore = (VkSemaphore)(VkSemaphore)((VkSemaphore)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkSemaphoreCreateInfo(m_state,
|
|
(VkSemaphoreCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateSemaphore 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSemaphore);
|
|
}
|
|
VkResult vkCreateSemaphore_VkResult_return = (VkResult)0;
|
|
vkCreateSemaphore_VkResult_return = m_state->on_vkCreateSemaphore(
|
|
&m_pool, device, pCreateInfo, pAllocator, pSemaphore);
|
|
if ((vkCreateSemaphore_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateSemaphore_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pSemaphore;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkSemaphore),
|
|
"handle map overwrite requires VkSemaphore to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkSemaphore((VkSemaphore*)pSemaphore, 1);
|
|
vkStream->write((VkSemaphore*)pSemaphore, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pSemaphore;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateSemaphore_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateSemaphore(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateSemaphore_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pSemaphore);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroySemaphore: {
|
|
android::base::beginTrace("vkDestroySemaphore decode");
|
|
VkDevice device;
|
|
VkSemaphore semaphore;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for semaphore;
|
|
VkSemaphore boxed_semaphore_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSemaphore*)&semaphore = (VkSemaphore)(VkSemaphore)((VkSemaphore)(*&cgen_var_1));
|
|
boxed_semaphore_preserve = semaphore;
|
|
semaphore = unbox_VkSemaphore(semaphore);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroySemaphore 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)semaphore,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroySemaphore(&m_pool, device, semaphore, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroySemaphore(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device,
|
|
boxed_semaphore_preserve, pAllocator);
|
|
}
|
|
delete_VkSemaphore(boxed_semaphore_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateEvent: {
|
|
android::base::beginTrace("vkCreateEvent decode");
|
|
VkDevice device;
|
|
const VkEventCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkEvent* pEvent;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkEventCreateInfo));
|
|
reservedunmarshal_VkEventCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkEventCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pEvent;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pEvent, sizeof(VkEvent));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkEvent*)pEvent = (VkEvent)(VkEvent)((VkEvent)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkEventCreateInfo(m_state, (VkEventCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCreateEvent 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pEvent);
|
|
}
|
|
VkResult vkCreateEvent_VkResult_return = (VkResult)0;
|
|
vkCreateEvent_VkResult_return =
|
|
vk->vkCreateEvent(unboxed_device, pCreateInfo, pAllocator, pEvent);
|
|
if ((vkCreateEvent_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateEvent_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pEvent;
|
|
if (vkCreateEvent_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkEvent),
|
|
"handle map overwrite requires VkEvent to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkEvent((VkEvent*)pEvent, 1);
|
|
vkStream->write((VkEvent*)pEvent, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pEvent;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateEvent_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateEvent(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkCreateEvent_VkResult_return,
|
|
device, pCreateInfo, pAllocator, pEvent);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyEvent: {
|
|
android::base::beginTrace("vkDestroyEvent decode");
|
|
VkDevice device;
|
|
VkEvent event;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual non dispatchable handle destroy unboxing for event;
|
|
VkEvent boxed_event_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkEvent*)&event = (VkEvent)(VkEvent)((VkEvent)(*&cgen_var_1));
|
|
boxed_event_preserve = event;
|
|
event = unbox_VkEvent(event);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyEvent 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)event,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyEvent(unboxed_device, event, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyEvent(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, boxed_event_preserve,
|
|
pAllocator);
|
|
}
|
|
delete_VkEvent(boxed_event_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetEventStatus: {
|
|
android::base::beginTrace("vkGetEventStatus decode");
|
|
VkDevice device;
|
|
VkEvent event;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetEventStatus 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)device, (unsigned long long)event);
|
|
}
|
|
VkResult vkGetEventStatus_VkResult_return = (VkResult)0;
|
|
vkGetEventStatus_VkResult_return = vk->vkGetEventStatus(unboxed_device, event);
|
|
if ((vkGetEventStatus_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetEventStatus_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetEventStatus_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetEventStatus(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkGetEventStatus_VkResult_return,
|
|
device, event);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkSetEvent: {
|
|
android::base::beginTrace("vkSetEvent decode");
|
|
VkDevice device;
|
|
VkEvent event;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkSetEvent 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)device, (unsigned long long)event);
|
|
}
|
|
VkResult vkSetEvent_VkResult_return = (VkResult)0;
|
|
vkSetEvent_VkResult_return = vk->vkSetEvent(unboxed_device, event);
|
|
if ((vkSetEvent_VkResult_return) == VK_ERROR_DEVICE_LOST) m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkSetEvent_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkSetEvent_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetEvent(snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkSetEvent_VkResult_return, device, event);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkResetEvent: {
|
|
android::base::beginTrace("vkResetEvent decode");
|
|
VkDevice device;
|
|
VkEvent event;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkResetEvent 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)device, (unsigned long long)event);
|
|
}
|
|
VkResult vkResetEvent_VkResult_return = (VkResult)0;
|
|
vkResetEvent_VkResult_return = vk->vkResetEvent(unboxed_device, event);
|
|
if ((vkResetEvent_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkResetEvent_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkResetEvent_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkResetEvent(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkResetEvent_VkResult_return, device,
|
|
event);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateQueryPool: {
|
|
android::base::beginTrace("vkCreateQueryPool decode");
|
|
VkDevice device;
|
|
const VkQueryPoolCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkQueryPool* pQueryPool;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkQueryPoolCreateInfo));
|
|
reservedunmarshal_VkQueryPoolCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkQueryPoolCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pQueryPool;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pQueryPool, sizeof(VkQueryPool));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkQueryPool*)pQueryPool = (VkQueryPool)(VkQueryPool)((VkQueryPool)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkQueryPoolCreateInfo(m_state,
|
|
(VkQueryPoolCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateQueryPool 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pQueryPool);
|
|
}
|
|
VkResult vkCreateQueryPool_VkResult_return = (VkResult)0;
|
|
vkCreateQueryPool_VkResult_return =
|
|
vk->vkCreateQueryPool(unboxed_device, pCreateInfo, pAllocator, pQueryPool);
|
|
if ((vkCreateQueryPool_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateQueryPool_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pQueryPool;
|
|
if (vkCreateQueryPool_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkQueryPool),
|
|
"handle map overwrite requires VkQueryPool to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkQueryPool((VkQueryPool*)pQueryPool, 1);
|
|
vkStream->write((VkQueryPool*)pQueryPool, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pQueryPool;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateQueryPool_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateQueryPool(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateQueryPool_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pQueryPool);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyQueryPool: {
|
|
android::base::beginTrace("vkDestroyQueryPool decode");
|
|
VkDevice device;
|
|
VkQueryPool queryPool;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual non dispatchable handle destroy unboxing for queryPool;
|
|
VkQueryPool boxed_queryPool_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool = (VkQueryPool)(VkQueryPool)((VkQueryPool)(*&cgen_var_1));
|
|
boxed_queryPool_preserve = queryPool;
|
|
queryPool = unbox_VkQueryPool(queryPool);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyQueryPool 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)queryPool,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyQueryPool(unboxed_device, queryPool, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyQueryPool(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device,
|
|
boxed_queryPool_preserve, pAllocator);
|
|
}
|
|
delete_VkQueryPool(boxed_queryPool_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetQueryPoolResults: {
|
|
android::base::beginTrace("vkGetQueryPoolResults decode");
|
|
VkDevice device;
|
|
VkQueryPool queryPool;
|
|
uint32_t firstQuery;
|
|
uint32_t queryCount;
|
|
size_t dataSize;
|
|
void* pData;
|
|
VkDeviceSize stride;
|
|
VkQueryResultFlags flags;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&firstQuery, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&queryCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((size_t*)&dataSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&dataSize);
|
|
*readStreamPtrPtr += 8;
|
|
// Begin manual dispatchable handle unboxing for pData;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pData, ((dataSize)) * sizeof(uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, ((dataSize)) * sizeof(uint8_t));
|
|
*readStreamPtrPtr += ((dataSize)) * sizeof(uint8_t);
|
|
memcpy((VkDeviceSize*)&stride, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkQueryResultFlags*)&flags, *readStreamPtrPtr, sizeof(VkQueryResultFlags));
|
|
*readStreamPtrPtr += sizeof(VkQueryResultFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetQueryPoolResults 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)queryPool,
|
|
(unsigned long long)firstQuery, (unsigned long long)queryCount,
|
|
(unsigned long long)dataSize, (unsigned long long)pData,
|
|
(unsigned long long)stride, (unsigned long long)flags);
|
|
}
|
|
VkResult vkGetQueryPoolResults_VkResult_return = (VkResult)0;
|
|
vkGetQueryPoolResults_VkResult_return =
|
|
vk->vkGetQueryPoolResults(unboxed_device, queryPool, firstQuery, queryCount,
|
|
dataSize, pData, stride, flags);
|
|
if ((vkGetQueryPoolResults_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetQueryPoolResults_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void*)pData, ((dataSize)) * sizeof(uint8_t));
|
|
vkStream->write(&vkGetQueryPoolResults_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetQueryPoolResults(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetQueryPoolResults_VkResult_return, device, queryPool, firstQuery,
|
|
queryCount, dataSize, pData, stride, flags);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateBuffer: {
|
|
android::base::beginTrace("vkCreateBuffer decode");
|
|
VkDevice device;
|
|
const VkBufferCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkBuffer* pBuffer;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkBufferCreateInfo));
|
|
reservedunmarshal_VkBufferCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pBuffer;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pBuffer, sizeof(VkBuffer));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkBuffer*)pBuffer = (VkBuffer)(VkBuffer)((VkBuffer)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkBufferCreateInfo(m_state,
|
|
(VkBufferCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCreateBuffer 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pBuffer);
|
|
}
|
|
VkResult vkCreateBuffer_VkResult_return = (VkResult)0;
|
|
vkCreateBuffer_VkResult_return =
|
|
m_state->on_vkCreateBuffer(&m_pool, device, pCreateInfo, pAllocator, pBuffer);
|
|
if ((vkCreateBuffer_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateBuffer_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pBuffer;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkBuffer),
|
|
"handle map overwrite requires VkBuffer to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkBuffer((VkBuffer*)pBuffer, 1);
|
|
vkStream->write((VkBuffer*)pBuffer, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pBuffer;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateBuffer_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateBuffer(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkCreateBuffer_VkResult_return,
|
|
device, pCreateInfo, pAllocator, pBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyBuffer: {
|
|
android::base::beginTrace("vkDestroyBuffer decode");
|
|
VkDevice device;
|
|
VkBuffer buffer;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for buffer;
|
|
VkBuffer boxed_buffer_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)(VkBuffer)((VkBuffer)(*&cgen_var_1));
|
|
boxed_buffer_preserve = buffer;
|
|
buffer = unbox_VkBuffer(buffer);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyBuffer 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)buffer,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyBuffer(&m_pool, device, buffer, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyBuffer(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, boxed_buffer_preserve,
|
|
pAllocator);
|
|
}
|
|
delete_VkBuffer(boxed_buffer_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateBufferView: {
|
|
android::base::beginTrace("vkCreateBufferView decode");
|
|
VkDevice device;
|
|
const VkBufferViewCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkBufferView* pView;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkBufferViewCreateInfo));
|
|
reservedunmarshal_VkBufferViewCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferViewCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pView;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pView, sizeof(VkBufferView));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkBufferView*)pView = (VkBufferView)(VkBufferView)((VkBufferView)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkBufferViewCreateInfo(m_state,
|
|
(VkBufferViewCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateBufferView 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pView);
|
|
}
|
|
VkResult vkCreateBufferView_VkResult_return = (VkResult)0;
|
|
vkCreateBufferView_VkResult_return =
|
|
vk->vkCreateBufferView(unboxed_device, pCreateInfo, pAllocator, pView);
|
|
if ((vkCreateBufferView_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateBufferView_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pView;
|
|
if (vkCreateBufferView_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkBufferView),
|
|
"handle map overwrite requires VkBufferView to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkBufferView((VkBufferView*)pView, 1);
|
|
vkStream->write((VkBufferView*)pView, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pView;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateBufferView_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateBufferView(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateBufferView_VkResult_return, device, pCreateInfo, pAllocator, pView);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyBufferView: {
|
|
android::base::beginTrace("vkDestroyBufferView decode");
|
|
VkDevice device;
|
|
VkBufferView bufferView;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual non dispatchable handle destroy unboxing for bufferView;
|
|
VkBufferView boxed_bufferView_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBufferView*)&bufferView =
|
|
(VkBufferView)(VkBufferView)((VkBufferView)(*&cgen_var_1));
|
|
boxed_bufferView_preserve = bufferView;
|
|
bufferView = unbox_VkBufferView(bufferView);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyBufferView 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)bufferView,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyBufferView(unboxed_device, bufferView, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyBufferView(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device,
|
|
boxed_bufferView_preserve, pAllocator);
|
|
}
|
|
delete_VkBufferView(boxed_bufferView_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateImage: {
|
|
android::base::beginTrace("vkCreateImage decode");
|
|
VkDevice device;
|
|
const VkImageCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkImage* pImage;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkImageCreateInfo));
|
|
reservedunmarshal_VkImageCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pImage;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pImage, sizeof(VkImage));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkImage*)pImage = (VkImage)(VkImage)((VkImage)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
m_state->transformImpl_VkImageCreateInfo_tohost(pCreateInfo, 1);
|
|
transform_tohost_VkImageCreateInfo(m_state, (VkImageCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCreateImage 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pImage);
|
|
}
|
|
VkResult vkCreateImage_VkResult_return = (VkResult)0;
|
|
vkCreateImage_VkResult_return =
|
|
m_state->on_vkCreateImage(&m_pool, device, pCreateInfo, pAllocator, pImage);
|
|
if ((vkCreateImage_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateImage_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pImage;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkImage),
|
|
"handle map overwrite requires VkImage to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkImage((VkImage*)pImage, 1);
|
|
vkStream->write((VkImage*)pImage, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pImage;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateImage_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateImage(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkCreateImage_VkResult_return,
|
|
device, pCreateInfo, pAllocator, pImage);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyImage: {
|
|
android::base::beginTrace("vkDestroyImage decode");
|
|
VkDevice device;
|
|
VkImage image;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for image;
|
|
VkImage boxed_image_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)(VkImage)((VkImage)(*&cgen_var_1));
|
|
boxed_image_preserve = image;
|
|
image = unbox_VkImage(image);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyImage 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)image,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyImage(&m_pool, device, image, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyImage(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, boxed_image_preserve,
|
|
pAllocator);
|
|
}
|
|
delete_VkImage(boxed_image_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetImageSubresourceLayout: {
|
|
android::base::beginTrace("vkGetImageSubresourceLayout decode");
|
|
VkDevice device;
|
|
VkImage image;
|
|
const VkImageSubresource* pSubresource;
|
|
VkSubresourceLayout* pLayout;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
vkReadStream->alloc((void**)&pSubresource, sizeof(const VkImageSubresource));
|
|
reservedunmarshal_VkImageSubresource(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageSubresource*)(pSubresource),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pLayout;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pLayout, sizeof(VkSubresourceLayout));
|
|
reservedunmarshal_VkSubresourceLayout(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubresourceLayout*)(pLayout),
|
|
readStreamPtrPtr);
|
|
if (pSubresource) {
|
|
transform_tohost_VkImageSubresource(m_state,
|
|
(VkImageSubresource*)(pSubresource));
|
|
}
|
|
if (pLayout) {
|
|
transform_tohost_VkSubresourceLayout(m_state, (VkSubresourceLayout*)(pLayout));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetImageSubresourceLayout 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)image,
|
|
(unsigned long long)pSubresource, (unsigned long long)pLayout);
|
|
}
|
|
vk->vkGetImageSubresourceLayout(unboxed_device, image, pSubresource, pLayout);
|
|
vkStream->unsetHandleMapping();
|
|
if (pLayout) {
|
|
transform_fromhost_VkSubresourceLayout(m_state,
|
|
(VkSubresourceLayout*)(pLayout));
|
|
}
|
|
marshal_VkSubresourceLayout(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubresourceLayout*)(pLayout));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageSubresourceLayout(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, image,
|
|
pSubresource, pLayout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateImageView: {
|
|
android::base::beginTrace("vkCreateImageView decode");
|
|
VkDevice device;
|
|
const VkImageViewCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkImageView* pView;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkImageViewCreateInfo));
|
|
reservedunmarshal_VkImageViewCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageViewCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pView;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pView, sizeof(VkImageView));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkImageView*)pView = (VkImageView)(VkImageView)((VkImageView)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkImageViewCreateInfo(m_state,
|
|
(VkImageViewCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateImageView 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pView);
|
|
}
|
|
VkResult vkCreateImageView_VkResult_return = (VkResult)0;
|
|
vkCreateImageView_VkResult_return =
|
|
m_state->on_vkCreateImageView(&m_pool, device, pCreateInfo, pAllocator, pView);
|
|
if ((vkCreateImageView_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateImageView_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pView;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkImageView),
|
|
"handle map overwrite requires VkImageView to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkImageView((VkImageView*)pView, 1);
|
|
vkStream->write((VkImageView*)pView, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pView;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateImageView_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateImageView(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateImageView_VkResult_return, device, pCreateInfo, pAllocator, pView);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyImageView: {
|
|
android::base::beginTrace("vkDestroyImageView decode");
|
|
VkDevice device;
|
|
VkImageView imageView;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for imageView;
|
|
VkImageView boxed_imageView_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImageView*)&imageView = (VkImageView)(VkImageView)((VkImageView)(*&cgen_var_1));
|
|
boxed_imageView_preserve = imageView;
|
|
imageView = unbox_VkImageView(imageView);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyImageView 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)imageView,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyImageView(&m_pool, device, imageView, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyImageView(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device,
|
|
boxed_imageView_preserve, pAllocator);
|
|
}
|
|
delete_VkImageView(boxed_imageView_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateShaderModule: {
|
|
android::base::beginTrace("vkCreateShaderModule decode");
|
|
VkDevice device;
|
|
const VkShaderModuleCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkShaderModule* pShaderModule;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkShaderModuleCreateInfo));
|
|
reservedunmarshal_VkShaderModuleCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkShaderModuleCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pShaderModule;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pShaderModule, sizeof(VkShaderModule));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkShaderModule*)pShaderModule =
|
|
(VkShaderModule)(VkShaderModule)((VkShaderModule)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkShaderModuleCreateInfo(
|
|
m_state, (VkShaderModuleCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateShaderModule 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pShaderModule);
|
|
}
|
|
VkResult vkCreateShaderModule_VkResult_return = (VkResult)0;
|
|
vkCreateShaderModule_VkResult_return = m_state->on_vkCreateShaderModule(
|
|
&m_pool, device, pCreateInfo, pAllocator, pShaderModule);
|
|
if ((vkCreateShaderModule_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateShaderModule_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pShaderModule;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkShaderModule),
|
|
"handle map overwrite requires VkShaderModule to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkShaderModule((VkShaderModule*)pShaderModule,
|
|
1);
|
|
vkStream->write((VkShaderModule*)pShaderModule, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pShaderModule;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateShaderModule_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateShaderModule(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateShaderModule_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pShaderModule);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyShaderModule: {
|
|
android::base::beginTrace("vkDestroyShaderModule decode");
|
|
VkDevice device;
|
|
VkShaderModule shaderModule;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for shaderModule;
|
|
VkShaderModule boxed_shaderModule_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkShaderModule*)&shaderModule =
|
|
(VkShaderModule)(VkShaderModule)((VkShaderModule)(*&cgen_var_1));
|
|
boxed_shaderModule_preserve = shaderModule;
|
|
shaderModule = unbox_VkShaderModule(shaderModule);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyShaderModule 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)shaderModule,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyShaderModule(&m_pool, device, shaderModule, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyShaderModule(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_shaderModule_preserve, pAllocator);
|
|
}
|
|
delete_VkShaderModule(boxed_shaderModule_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreatePipelineCache: {
|
|
android::base::beginTrace("vkCreatePipelineCache decode");
|
|
VkDevice device;
|
|
const VkPipelineCacheCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkPipelineCache* pPipelineCache;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkPipelineCacheCreateInfo));
|
|
reservedunmarshal_VkPipelineCacheCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineCacheCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPipelineCache;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPipelineCache, sizeof(VkPipelineCache));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkPipelineCache*)pPipelineCache =
|
|
(VkPipelineCache)(VkPipelineCache)((VkPipelineCache)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkPipelineCacheCreateInfo(
|
|
m_state, (VkPipelineCacheCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreatePipelineCache 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pPipelineCache);
|
|
}
|
|
VkResult vkCreatePipelineCache_VkResult_return = (VkResult)0;
|
|
vkCreatePipelineCache_VkResult_return = m_state->on_vkCreatePipelineCache(
|
|
&m_pool, device, pCreateInfo, pAllocator, pPipelineCache);
|
|
if ((vkCreatePipelineCache_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreatePipelineCache_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pPipelineCache;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkPipelineCache),
|
|
"handle map overwrite requires VkPipelineCache to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkPipelineCache(
|
|
(VkPipelineCache*)pPipelineCache, 1);
|
|
vkStream->write((VkPipelineCache*)pPipelineCache, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pPipelineCache;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreatePipelineCache_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreatePipelineCache(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreatePipelineCache_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pPipelineCache);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyPipelineCache: {
|
|
android::base::beginTrace("vkDestroyPipelineCache decode");
|
|
VkDevice device;
|
|
VkPipelineCache pipelineCache;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for pipelineCache;
|
|
VkPipelineCache boxed_pipelineCache_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineCache*)&pipelineCache =
|
|
(VkPipelineCache)(VkPipelineCache)((VkPipelineCache)(*&cgen_var_1));
|
|
boxed_pipelineCache_preserve = pipelineCache;
|
|
pipelineCache = unbox_VkPipelineCache(pipelineCache);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyPipelineCache 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipelineCache,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyPipelineCache(&m_pool, device, pipelineCache, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyPipelineCache(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_pipelineCache_preserve, pAllocator);
|
|
}
|
|
delete_VkPipelineCache(boxed_pipelineCache_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPipelineCacheData: {
|
|
android::base::beginTrace("vkGetPipelineCacheData decode");
|
|
VkDevice device;
|
|
VkPipelineCache pipelineCache;
|
|
size_t* pDataSize;
|
|
void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineCache*)&pipelineCache =
|
|
(VkPipelineCache)unbox_VkPipelineCache((VkPipelineCache)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pDataSize;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((size_t**)&pDataSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pDataSize);
|
|
*readStreamPtrPtr += 8;
|
|
if (pDataSize) {
|
|
vkReadStream->alloc((void**)&pDataSize, sizeof(size_t));
|
|
memcpy((size_t*)&(*pDataSize), (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pDataSize));
|
|
*readStreamPtrPtr += 8;
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pData;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((void**)&pData, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pData);
|
|
*readStreamPtrPtr += 8;
|
|
if (pData) {
|
|
vkReadStream->alloc((void**)&pData, (*(pDataSize)) * sizeof(uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, (*(pDataSize)) * sizeof(uint8_t));
|
|
*readStreamPtrPtr += (*(pDataSize)) * sizeof(uint8_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPipelineCacheData 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipelineCache,
|
|
(unsigned long long)pDataSize, (unsigned long long)pData);
|
|
}
|
|
VkResult vkGetPipelineCacheData_VkResult_return = (VkResult)0;
|
|
vkGetPipelineCacheData_VkResult_return =
|
|
vk->vkGetPipelineCacheData(unboxed_device, pipelineCache, pDataSize, pData);
|
|
if ((vkGetPipelineCacheData_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetPipelineCacheData_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pDataSize;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pDataSize) {
|
|
uint64_t cgen_var_4_0 = (uint64_t)(*pDataSize);
|
|
vkStream->putBe64(cgen_var_4_0);
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pData;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pData) {
|
|
vkStream->write((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
|
|
}
|
|
vkStream->write(&vkGetPipelineCacheData_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPipelineCacheData(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPipelineCacheData_VkResult_return, device, pipelineCache, pDataSize,
|
|
pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkMergePipelineCaches: {
|
|
android::base::beginTrace("vkMergePipelineCaches decode");
|
|
VkDevice device;
|
|
VkPipelineCache dstCache;
|
|
uint32_t srcCacheCount;
|
|
const VkPipelineCache* pSrcCaches;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineCache*)&dstCache =
|
|
(VkPipelineCache)unbox_VkPipelineCache((VkPipelineCache)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&srcCacheCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pSrcCaches,
|
|
((srcCacheCount)) * sizeof(const VkPipelineCache));
|
|
if (((srcCacheCount))) {
|
|
uint8_t* cgen_var_2_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((srcCacheCount));
|
|
for (uint32_t k = 0; k < ((srcCacheCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_2_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkPipelineCache*)pSrcCaches) + k) =
|
|
(VkPipelineCache)unbox_VkPipelineCache((VkPipelineCache)tmpval);
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkMergePipelineCaches 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)dstCache,
|
|
(unsigned long long)srcCacheCount, (unsigned long long)pSrcCaches);
|
|
}
|
|
VkResult vkMergePipelineCaches_VkResult_return = (VkResult)0;
|
|
vkMergePipelineCaches_VkResult_return =
|
|
vk->vkMergePipelineCaches(unboxed_device, dstCache, srcCacheCount, pSrcCaches);
|
|
if ((vkMergePipelineCaches_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkMergePipelineCaches_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkMergePipelineCaches_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkMergePipelineCaches(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkMergePipelineCaches_VkResult_return, device, dstCache, srcCacheCount,
|
|
pSrcCaches);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateGraphicsPipelines: {
|
|
android::base::beginTrace("vkCreateGraphicsPipelines decode");
|
|
VkDevice device;
|
|
VkPipelineCache pipelineCache;
|
|
uint32_t createInfoCount;
|
|
const VkGraphicsPipelineCreateInfo* pCreateInfos;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkPipeline* pPipelines;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineCache*)&pipelineCache =
|
|
(VkPipelineCache)unbox_VkPipelineCache((VkPipelineCache)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&createInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pCreateInfos,
|
|
((createInfoCount)) * sizeof(const VkGraphicsPipelineCreateInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
|
|
reservedunmarshal_VkGraphicsPipelineCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkGraphicsPipelineCreateInfo*)(pCreateInfos + i), readStreamPtrPtr);
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPipelines;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPipelines, ((createInfoCount)) * sizeof(VkPipeline));
|
|
if (((createInfoCount))) {
|
|
uint8_t* cgen_var_3_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((createInfoCount));
|
|
for (uint32_t k = 0; k < ((createInfoCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_3_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkPipeline*)pPipelines) + k) =
|
|
(VkPipeline)(VkPipeline)((VkPipeline)tmpval);
|
|
}
|
|
}
|
|
if (pCreateInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
|
|
transform_tohost_VkGraphicsPipelineCreateInfo(
|
|
m_state, (VkGraphicsPipelineCreateInfo*)(pCreateInfos + i));
|
|
}
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateGraphicsPipelines 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipelineCache,
|
|
(unsigned long long)createInfoCount, (unsigned long long)pCreateInfos,
|
|
(unsigned long long)pAllocator, (unsigned long long)pPipelines);
|
|
}
|
|
VkResult vkCreateGraphicsPipelines_VkResult_return = (VkResult)0;
|
|
vkCreateGraphicsPipelines_VkResult_return = m_state->on_vkCreateGraphicsPipelines(
|
|
&m_pool, device, pipelineCache, createInfoCount, pCreateInfos, pAllocator,
|
|
pPipelines);
|
|
if ((vkCreateGraphicsPipelines_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateGraphicsPipelines_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pPipelines;
|
|
vkStream->unsetHandleMapping();
|
|
if (((createInfoCount))) {
|
|
uint64_t* cgen_var_4;
|
|
vkStream->alloc((void**)&cgen_var_4, ((createInfoCount)) * 8);
|
|
static_assert(8 == sizeof(VkPipeline),
|
|
"handle map overwrite requires VkPipeline to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkPipeline((VkPipeline*)pPipelines,
|
|
((createInfoCount)));
|
|
vkStream->write((VkPipeline*)pPipelines, 8 * ((createInfoCount)));
|
|
}
|
|
// Begin manual non dispatchable handle create for pPipelines;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateGraphicsPipelines_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateGraphicsPipelines(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateGraphicsPipelines_VkResult_return, device, pipelineCache,
|
|
createInfoCount, pCreateInfos, pAllocator, pPipelines);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateComputePipelines: {
|
|
android::base::beginTrace("vkCreateComputePipelines decode");
|
|
VkDevice device;
|
|
VkPipelineCache pipelineCache;
|
|
uint32_t createInfoCount;
|
|
const VkComputePipelineCreateInfo* pCreateInfos;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkPipeline* pPipelines;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineCache*)&pipelineCache =
|
|
(VkPipelineCache)unbox_VkPipelineCache((VkPipelineCache)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&createInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pCreateInfos,
|
|
((createInfoCount)) * sizeof(const VkComputePipelineCreateInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
|
|
reservedunmarshal_VkComputePipelineCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkComputePipelineCreateInfo*)(pCreateInfos + i), readStreamPtrPtr);
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPipelines;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPipelines, ((createInfoCount)) * sizeof(VkPipeline));
|
|
if (((createInfoCount))) {
|
|
uint8_t* cgen_var_3_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((createInfoCount));
|
|
for (uint32_t k = 0; k < ((createInfoCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_3_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkPipeline*)pPipelines) + k) =
|
|
(VkPipeline)(VkPipeline)((VkPipeline)tmpval);
|
|
}
|
|
}
|
|
if (pCreateInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
|
|
transform_tohost_VkComputePipelineCreateInfo(
|
|
m_state, (VkComputePipelineCreateInfo*)(pCreateInfos + i));
|
|
}
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateComputePipelines 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipelineCache,
|
|
(unsigned long long)createInfoCount, (unsigned long long)pCreateInfos,
|
|
(unsigned long long)pAllocator, (unsigned long long)pPipelines);
|
|
}
|
|
VkResult vkCreateComputePipelines_VkResult_return = (VkResult)0;
|
|
vkCreateComputePipelines_VkResult_return =
|
|
vk->vkCreateComputePipelines(unboxed_device, pipelineCache, createInfoCount,
|
|
pCreateInfos, pAllocator, pPipelines);
|
|
if ((vkCreateComputePipelines_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateComputePipelines_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pPipelines;
|
|
if (vkCreateComputePipelines_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
if (((createInfoCount))) {
|
|
uint64_t* cgen_var_4;
|
|
vkStream->alloc((void**)&cgen_var_4, ((createInfoCount)) * 8);
|
|
static_assert(8 == sizeof(VkPipeline),
|
|
"handle map overwrite requires VkPipeline to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkPipeline((VkPipeline*)pPipelines,
|
|
((createInfoCount)));
|
|
vkStream->write((VkPipeline*)pPipelines, 8 * ((createInfoCount)));
|
|
}
|
|
// Begin auto non dispatchable handle create for pPipelines;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateComputePipelines_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateComputePipelines(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateComputePipelines_VkResult_return, device, pipelineCache,
|
|
createInfoCount, pCreateInfos, pAllocator, pPipelines);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyPipeline: {
|
|
android::base::beginTrace("vkDestroyPipeline decode");
|
|
VkDevice device;
|
|
VkPipeline pipeline;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for pipeline;
|
|
VkPipeline boxed_pipeline_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipeline*)&pipeline = (VkPipeline)(VkPipeline)((VkPipeline)(*&cgen_var_1));
|
|
boxed_pipeline_preserve = pipeline;
|
|
pipeline = unbox_VkPipeline(pipeline);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyPipeline 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipeline,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyPipeline(&m_pool, device, pipeline, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyPipeline(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, boxed_pipeline_preserve,
|
|
pAllocator);
|
|
}
|
|
delete_VkPipeline(boxed_pipeline_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreatePipelineLayout: {
|
|
android::base::beginTrace("vkCreatePipelineLayout decode");
|
|
VkDevice device;
|
|
const VkPipelineLayoutCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkPipelineLayout* pPipelineLayout;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkPipelineLayoutCreateInfo));
|
|
reservedunmarshal_VkPipelineLayoutCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineLayoutCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPipelineLayout;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPipelineLayout, sizeof(VkPipelineLayout));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkPipelineLayout*)pPipelineLayout =
|
|
(VkPipelineLayout)(VkPipelineLayout)((VkPipelineLayout)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkPipelineLayoutCreateInfo(
|
|
m_state, (VkPipelineLayoutCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreatePipelineLayout 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pPipelineLayout);
|
|
}
|
|
m_state->lock();
|
|
VkResult vkCreatePipelineLayout_VkResult_return = (VkResult)0;
|
|
vkCreatePipelineLayout_VkResult_return = vk->vkCreatePipelineLayout(
|
|
unboxed_device, pCreateInfo, pAllocator, pPipelineLayout);
|
|
if ((vkCreatePipelineLayout_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreatePipelineLayout_VkResult_return, opcode,
|
|
context);
|
|
m_state->unlock();
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pPipelineLayout;
|
|
if (vkCreatePipelineLayout_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkPipelineLayout),
|
|
"handle map overwrite requires VkPipelineLayout to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkPipelineLayout(
|
|
(VkPipelineLayout*)pPipelineLayout, 1);
|
|
vkStream->write((VkPipelineLayout*)pPipelineLayout, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pPipelineLayout;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreatePipelineLayout_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreatePipelineLayout(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreatePipelineLayout_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pPipelineLayout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyPipelineLayout: {
|
|
android::base::beginTrace("vkDestroyPipelineLayout decode");
|
|
VkDevice device;
|
|
VkPipelineLayout pipelineLayout;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual non dispatchable handle destroy unboxing for pipelineLayout;
|
|
VkPipelineLayout boxed_pipelineLayout_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineLayout*)&pipelineLayout =
|
|
(VkPipelineLayout)(VkPipelineLayout)((VkPipelineLayout)(*&cgen_var_1));
|
|
boxed_pipelineLayout_preserve = pipelineLayout;
|
|
pipelineLayout = unbox_VkPipelineLayout(pipelineLayout);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyPipelineLayout 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pipelineLayout, (unsigned long long)pAllocator);
|
|
}
|
|
std::function<void()> delayed_remove_callback = [vk, unboxed_device, pipelineLayout,
|
|
pAllocator]() {
|
|
auto state = VkDecoderGlobalState::get();
|
|
// state already locked;
|
|
vk->vkDestroyPipelineLayout(unboxed_device, pipelineLayout, pAllocator);
|
|
};
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyPipelineLayout(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_pipelineLayout_preserve, pAllocator);
|
|
}
|
|
delayed_delete_VkPipelineLayout(boxed_pipelineLayout_preserve, unboxed_device,
|
|
delayed_remove_callback);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateSampler: {
|
|
android::base::beginTrace("vkCreateSampler decode");
|
|
VkDevice device;
|
|
const VkSamplerCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSampler* pSampler;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkSamplerCreateInfo));
|
|
reservedunmarshal_VkSamplerCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSamplerCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSampler;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSampler, sizeof(VkSampler));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSampler*)pSampler = (VkSampler)(VkSampler)((VkSampler)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkSamplerCreateInfo(m_state,
|
|
(VkSamplerCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateSampler 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSampler);
|
|
}
|
|
VkResult vkCreateSampler_VkResult_return = (VkResult)0;
|
|
vkCreateSampler_VkResult_return =
|
|
m_state->on_vkCreateSampler(&m_pool, device, pCreateInfo, pAllocator, pSampler);
|
|
if ((vkCreateSampler_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateSampler_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pSampler;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkSampler),
|
|
"handle map overwrite requires VkSampler to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkSampler((VkSampler*)pSampler, 1);
|
|
vkStream->write((VkSampler*)pSampler, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pSampler;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateSampler_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateSampler(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkCreateSampler_VkResult_return,
|
|
device, pCreateInfo, pAllocator, pSampler);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroySampler: {
|
|
android::base::beginTrace("vkDestroySampler decode");
|
|
VkDevice device;
|
|
VkSampler sampler;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for sampler;
|
|
VkSampler boxed_sampler_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSampler*)&sampler = (VkSampler)(VkSampler)((VkSampler)(*&cgen_var_1));
|
|
boxed_sampler_preserve = sampler;
|
|
sampler = unbox_VkSampler(sampler);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroySampler 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)sampler,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroySampler(&m_pool, device, sampler, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroySampler(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, boxed_sampler_preserve,
|
|
pAllocator);
|
|
}
|
|
delete_VkSampler(boxed_sampler_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateDescriptorSetLayout: {
|
|
android::base::beginTrace("vkCreateDescriptorSetLayout decode");
|
|
VkDevice device;
|
|
const VkDescriptorSetLayoutCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDescriptorSetLayout* pSetLayout;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkDescriptorSetLayoutCreateInfo));
|
|
reservedunmarshal_VkDescriptorSetLayoutCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorSetLayoutCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSetLayout;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSetLayout, sizeof(VkDescriptorSetLayout));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDescriptorSetLayout*)pSetLayout =
|
|
(VkDescriptorSetLayout)(VkDescriptorSetLayout)((
|
|
VkDescriptorSetLayout)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDescriptorSetLayoutCreateInfo(
|
|
m_state, (VkDescriptorSetLayoutCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateDescriptorSetLayout 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSetLayout);
|
|
}
|
|
VkResult vkCreateDescriptorSetLayout_VkResult_return = (VkResult)0;
|
|
vkCreateDescriptorSetLayout_VkResult_return =
|
|
m_state->on_vkCreateDescriptorSetLayout(&m_pool, device, pCreateInfo,
|
|
pAllocator, pSetLayout);
|
|
if ((vkCreateDescriptorSetLayout_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDescriptorSetLayout_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pSetLayout;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkDescriptorSetLayout),
|
|
"handle map overwrite requires VkDescriptorSetLayout to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDescriptorSetLayout(
|
|
(VkDescriptorSetLayout*)pSetLayout, 1);
|
|
vkStream->write((VkDescriptorSetLayout*)pSetLayout, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pSetLayout;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateDescriptorSetLayout_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDescriptorSetLayout(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDescriptorSetLayout_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pSetLayout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyDescriptorSetLayout: {
|
|
android::base::beginTrace("vkDestroyDescriptorSetLayout decode");
|
|
VkDevice device;
|
|
VkDescriptorSetLayout descriptorSetLayout;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for descriptorSetLayout;
|
|
VkDescriptorSetLayout boxed_descriptorSetLayout_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorSetLayout*)&descriptorSetLayout =
|
|
(VkDescriptorSetLayout)(VkDescriptorSetLayout)((
|
|
VkDescriptorSetLayout)(*&cgen_var_1));
|
|
boxed_descriptorSetLayout_preserve = descriptorSetLayout;
|
|
descriptorSetLayout = unbox_VkDescriptorSetLayout(descriptorSetLayout);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyDescriptorSetLayout 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)descriptorSetLayout,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyDescriptorSetLayout(&m_pool, device, descriptorSetLayout,
|
|
pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyDescriptorSetLayout(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_descriptorSetLayout_preserve, pAllocator);
|
|
}
|
|
delete_VkDescriptorSetLayout(boxed_descriptorSetLayout_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateDescriptorPool: {
|
|
android::base::beginTrace("vkCreateDescriptorPool decode");
|
|
VkDevice device;
|
|
const VkDescriptorPoolCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDescriptorPool* pDescriptorPool;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkDescriptorPoolCreateInfo));
|
|
reservedunmarshal_VkDescriptorPoolCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorPoolCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pDescriptorPool;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDescriptorPool, sizeof(VkDescriptorPool));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDescriptorPool*)pDescriptorPool =
|
|
(VkDescriptorPool)(VkDescriptorPool)((VkDescriptorPool)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDescriptorPoolCreateInfo(
|
|
m_state, (VkDescriptorPoolCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateDescriptorPool 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pDescriptorPool);
|
|
}
|
|
VkResult vkCreateDescriptorPool_VkResult_return = (VkResult)0;
|
|
vkCreateDescriptorPool_VkResult_return = m_state->on_vkCreateDescriptorPool(
|
|
&m_pool, device, pCreateInfo, pAllocator, pDescriptorPool);
|
|
if ((vkCreateDescriptorPool_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDescriptorPool_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pDescriptorPool;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkDescriptorPool),
|
|
"handle map overwrite requires VkDescriptorPool to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDescriptorPool(
|
|
(VkDescriptorPool*)pDescriptorPool, 1);
|
|
vkStream->write((VkDescriptorPool*)pDescriptorPool, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pDescriptorPool;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateDescriptorPool_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDescriptorPool(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDescriptorPool_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pDescriptorPool);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyDescriptorPool: {
|
|
android::base::beginTrace("vkDestroyDescriptorPool decode");
|
|
VkDevice device;
|
|
VkDescriptorPool descriptorPool;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for descriptorPool;
|
|
VkDescriptorPool boxed_descriptorPool_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorPool*)&descriptorPool =
|
|
(VkDescriptorPool)(VkDescriptorPool)((VkDescriptorPool)(*&cgen_var_1));
|
|
boxed_descriptorPool_preserve = descriptorPool;
|
|
descriptorPool = unbox_VkDescriptorPool(descriptorPool);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyDescriptorPool 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)descriptorPool, (unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyDescriptorPool(&m_pool, device, descriptorPool, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyDescriptorPool(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_descriptorPool_preserve, pAllocator);
|
|
}
|
|
delete_VkDescriptorPool(boxed_descriptorPool_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkResetDescriptorPool: {
|
|
android::base::beginTrace("vkResetDescriptorPool decode");
|
|
VkDevice device;
|
|
VkDescriptorPool descriptorPool;
|
|
VkDescriptorPoolResetFlags flags;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorPool*)&descriptorPool =
|
|
(VkDescriptorPool)unbox_VkDescriptorPool((VkDescriptorPool)(*&cgen_var_1));
|
|
memcpy((VkDescriptorPoolResetFlags*)&flags, *readStreamPtrPtr,
|
|
sizeof(VkDescriptorPoolResetFlags));
|
|
*readStreamPtrPtr += sizeof(VkDescriptorPoolResetFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkResetDescriptorPool 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)descriptorPool, (unsigned long long)flags);
|
|
}
|
|
VkResult vkResetDescriptorPool_VkResult_return = (VkResult)0;
|
|
vkResetDescriptorPool_VkResult_return =
|
|
m_state->on_vkResetDescriptorPool(&m_pool, device, descriptorPool, flags);
|
|
if ((vkResetDescriptorPool_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkResetDescriptorPool_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkResetDescriptorPool_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkResetDescriptorPool(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkResetDescriptorPool_VkResult_return, device, descriptorPool, flags);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkAllocateDescriptorSets: {
|
|
android::base::beginTrace("vkAllocateDescriptorSets decode");
|
|
VkDevice device;
|
|
const VkDescriptorSetAllocateInfo* pAllocateInfo;
|
|
VkDescriptorSet* pDescriptorSets;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pAllocateInfo,
|
|
sizeof(const VkDescriptorSetAllocateInfo));
|
|
reservedunmarshal_VkDescriptorSetAllocateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorSetAllocateInfo*)(pAllocateInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pDescriptorSets;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDescriptorSets,
|
|
pAllocateInfo->descriptorSetCount * sizeof(VkDescriptorSet));
|
|
if (pAllocateInfo->descriptorSetCount) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * pAllocateInfo->descriptorSetCount;
|
|
for (uint32_t k = 0; k < pAllocateInfo->descriptorSetCount; ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkDescriptorSet*)pDescriptorSets) + k) =
|
|
(VkDescriptorSet)(VkDescriptorSet)((VkDescriptorSet)tmpval);
|
|
}
|
|
}
|
|
if (pAllocateInfo) {
|
|
transform_tohost_VkDescriptorSetAllocateInfo(
|
|
m_state, (VkDescriptorSetAllocateInfo*)(pAllocateInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAllocateDescriptorSets 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pAllocateInfo,
|
|
(unsigned long long)pDescriptorSets);
|
|
}
|
|
VkResult vkAllocateDescriptorSets_VkResult_return = (VkResult)0;
|
|
vkAllocateDescriptorSets_VkResult_return = m_state->on_vkAllocateDescriptorSets(
|
|
&m_pool, device, pAllocateInfo, pDescriptorSets);
|
|
if ((vkAllocateDescriptorSets_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAllocateDescriptorSets_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pDescriptorSets;
|
|
vkStream->unsetHandleMapping();
|
|
if (pAllocateInfo->descriptorSetCount) {
|
|
uint64_t* cgen_var_2;
|
|
vkStream->alloc((void**)&cgen_var_2, pAllocateInfo->descriptorSetCount * 8);
|
|
static_assert(
|
|
8 == sizeof(VkDescriptorSet),
|
|
"handle map overwrite requires VkDescriptorSet to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDescriptorSet(
|
|
(VkDescriptorSet*)pDescriptorSets, pAllocateInfo->descriptorSetCount);
|
|
vkStream->write((VkDescriptorSet*)pDescriptorSets,
|
|
8 * pAllocateInfo->descriptorSetCount);
|
|
}
|
|
// Begin manual non dispatchable handle create for pDescriptorSets;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkAllocateDescriptorSets_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAllocateDescriptorSets(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAllocateDescriptorSets_VkResult_return, device, pAllocateInfo,
|
|
pDescriptorSets);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkFreeDescriptorSets: {
|
|
android::base::beginTrace("vkFreeDescriptorSets decode");
|
|
VkDevice device;
|
|
VkDescriptorPool descriptorPool;
|
|
uint32_t descriptorSetCount;
|
|
const VkDescriptorSet* pDescriptorSets;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorPool*)&descriptorPool =
|
|
(VkDescriptorPool)unbox_VkDescriptorPool((VkDescriptorPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&descriptorSetCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual non dispatchable handle destroy unboxing for pDescriptorSets;
|
|
VkDescriptorSet* boxed_pDescriptorSets_preserve;
|
|
vkReadStream->alloc((void**)&boxed_pDescriptorSets_preserve,
|
|
((descriptorSetCount)) * sizeof(VkDescriptorSet));
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDescriptorSet**)&pDescriptorSets, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pDescriptorSets);
|
|
*readStreamPtrPtr += 8;
|
|
if (pDescriptorSets) {
|
|
vkReadStream->alloc((void**)&pDescriptorSets,
|
|
((descriptorSetCount)) * sizeof(const VkDescriptorSet));
|
|
if (((descriptorSetCount))) {
|
|
uint8_t* cgen_var_2_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((descriptorSetCount));
|
|
for (uint32_t k = 0; k < ((descriptorSetCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_2_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkDescriptorSet*)pDescriptorSets) + k) =
|
|
(VkDescriptorSet)(VkDescriptorSet)((VkDescriptorSet)tmpval);
|
|
}
|
|
}
|
|
}
|
|
for (uint32_t i = 0; i < ((descriptorSetCount)); ++i) {
|
|
boxed_pDescriptorSets_preserve[i] = pDescriptorSets[i];
|
|
((VkDescriptorSet*)(pDescriptorSets))[i] =
|
|
unbox_VkDescriptorSet(pDescriptorSets[i]);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkFreeDescriptorSets 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)descriptorPool,
|
|
(unsigned long long)descriptorSetCount,
|
|
(unsigned long long)pDescriptorSets);
|
|
}
|
|
VkResult vkFreeDescriptorSets_VkResult_return = (VkResult)0;
|
|
vkFreeDescriptorSets_VkResult_return = m_state->on_vkFreeDescriptorSets(
|
|
&m_pool, device, descriptorPool, descriptorSetCount, pDescriptorSets);
|
|
if ((vkFreeDescriptorSets_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkFreeDescriptorSets_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkFreeDescriptorSets_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkFreeDescriptorSets(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkFreeDescriptorSets_VkResult_return, device, descriptorPool,
|
|
descriptorSetCount, boxed_pDescriptorSets_preserve);
|
|
}
|
|
// Skipping handle cleanup for vkFreeDescriptorSets
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkUpdateDescriptorSets: {
|
|
android::base::beginTrace("vkUpdateDescriptorSets decode");
|
|
VkDevice device;
|
|
uint32_t descriptorWriteCount;
|
|
const VkWriteDescriptorSet* pDescriptorWrites;
|
|
uint32_t descriptorCopyCount;
|
|
const VkCopyDescriptorSet* pDescriptorCopies;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&descriptorWriteCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pDescriptorWrites,
|
|
((descriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
|
|
for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
|
|
reservedunmarshal_VkWriteDescriptorSet(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkWriteDescriptorSet*)(pDescriptorWrites + i), readStreamPtrPtr);
|
|
}
|
|
memcpy((uint32_t*)&descriptorCopyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pDescriptorCopies,
|
|
((descriptorCopyCount)) * sizeof(const VkCopyDescriptorSet));
|
|
for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i) {
|
|
reservedunmarshal_VkCopyDescriptorSet(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyDescriptorSet*)(pDescriptorCopies + i), readStreamPtrPtr);
|
|
}
|
|
if (pDescriptorWrites) {
|
|
for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
|
|
transform_tohost_VkWriteDescriptorSet(
|
|
m_state, (VkWriteDescriptorSet*)(pDescriptorWrites + i));
|
|
}
|
|
}
|
|
if (pDescriptorCopies) {
|
|
for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i) {
|
|
transform_tohost_VkCopyDescriptorSet(
|
|
m_state, (VkCopyDescriptorSet*)(pDescriptorCopies + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkUpdateDescriptorSets 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)descriptorWriteCount,
|
|
(unsigned long long)pDescriptorWrites,
|
|
(unsigned long long)descriptorCopyCount,
|
|
(unsigned long long)pDescriptorCopies);
|
|
}
|
|
m_state->on_vkUpdateDescriptorSets(&m_pool, device, descriptorWriteCount,
|
|
pDescriptorWrites, descriptorCopyCount,
|
|
pDescriptorCopies);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkUpdateDescriptorSets(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
descriptorWriteCount, pDescriptorWrites, descriptorCopyCount,
|
|
pDescriptorCopies);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateFramebuffer: {
|
|
android::base::beginTrace("vkCreateFramebuffer decode");
|
|
VkDevice device;
|
|
const VkFramebufferCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkFramebuffer* pFramebuffer;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkFramebufferCreateInfo));
|
|
reservedunmarshal_VkFramebufferCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFramebufferCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pFramebuffer;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFramebuffer, sizeof(VkFramebuffer));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkFramebuffer*)pFramebuffer =
|
|
(VkFramebuffer)(VkFramebuffer)((VkFramebuffer)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkFramebufferCreateInfo(
|
|
m_state, (VkFramebufferCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateFramebuffer 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pFramebuffer);
|
|
}
|
|
VkResult vkCreateFramebuffer_VkResult_return = (VkResult)0;
|
|
vkCreateFramebuffer_VkResult_return = m_state->on_vkCreateFramebuffer(
|
|
&m_pool, device, pCreateInfo, pAllocator, pFramebuffer);
|
|
if ((vkCreateFramebuffer_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateFramebuffer_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pFramebuffer;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkFramebuffer),
|
|
"handle map overwrite requires VkFramebuffer to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkFramebuffer((VkFramebuffer*)pFramebuffer,
|
|
1);
|
|
vkStream->write((VkFramebuffer*)pFramebuffer, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pFramebuffer;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateFramebuffer_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateFramebuffer(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateFramebuffer_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pFramebuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyFramebuffer: {
|
|
android::base::beginTrace("vkDestroyFramebuffer decode");
|
|
VkDevice device;
|
|
VkFramebuffer framebuffer;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for framebuffer;
|
|
VkFramebuffer boxed_framebuffer_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFramebuffer*)&framebuffer =
|
|
(VkFramebuffer)(VkFramebuffer)((VkFramebuffer)(*&cgen_var_1));
|
|
boxed_framebuffer_preserve = framebuffer;
|
|
framebuffer = unbox_VkFramebuffer(framebuffer);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyFramebuffer 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)framebuffer,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyFramebuffer(&m_pool, device, framebuffer, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyFramebuffer(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_framebuffer_preserve, pAllocator);
|
|
}
|
|
delete_VkFramebuffer(boxed_framebuffer_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateRenderPass: {
|
|
android::base::beginTrace("vkCreateRenderPass decode");
|
|
VkDevice device;
|
|
const VkRenderPassCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkRenderPass* pRenderPass;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkRenderPassCreateInfo));
|
|
reservedunmarshal_VkRenderPassCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRenderPassCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pRenderPass;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pRenderPass, sizeof(VkRenderPass));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkRenderPass*)pRenderPass =
|
|
(VkRenderPass)(VkRenderPass)((VkRenderPass)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkRenderPassCreateInfo(m_state,
|
|
(VkRenderPassCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateRenderPass 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pRenderPass);
|
|
}
|
|
VkResult vkCreateRenderPass_VkResult_return = (VkResult)0;
|
|
vkCreateRenderPass_VkResult_return = m_state->on_vkCreateRenderPass(
|
|
&m_pool, device, pCreateInfo, pAllocator, pRenderPass);
|
|
if ((vkCreateRenderPass_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateRenderPass_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pRenderPass;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkRenderPass),
|
|
"handle map overwrite requires VkRenderPass to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkRenderPass((VkRenderPass*)pRenderPass, 1);
|
|
vkStream->write((VkRenderPass*)pRenderPass, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pRenderPass;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateRenderPass_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateRenderPass(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateRenderPass_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pRenderPass);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyRenderPass: {
|
|
android::base::beginTrace("vkDestroyRenderPass decode");
|
|
VkDevice device;
|
|
VkRenderPass renderPass;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for renderPass;
|
|
VkRenderPass boxed_renderPass_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkRenderPass*)&renderPass =
|
|
(VkRenderPass)(VkRenderPass)((VkRenderPass)(*&cgen_var_1));
|
|
boxed_renderPass_preserve = renderPass;
|
|
renderPass = unbox_VkRenderPass(renderPass);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyRenderPass 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)renderPass,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyRenderPass(&m_pool, device, renderPass, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyRenderPass(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device,
|
|
boxed_renderPass_preserve, pAllocator);
|
|
}
|
|
delete_VkRenderPass(boxed_renderPass_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetRenderAreaGranularity: {
|
|
android::base::beginTrace("vkGetRenderAreaGranularity decode");
|
|
VkDevice device;
|
|
VkRenderPass renderPass;
|
|
VkExtent2D* pGranularity;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkRenderPass*)&renderPass =
|
|
(VkRenderPass)unbox_VkRenderPass((VkRenderPass)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pGranularity;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pGranularity, sizeof(VkExtent2D));
|
|
reservedunmarshal_VkExtent2D(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExtent2D*)(pGranularity), readStreamPtrPtr);
|
|
if (pGranularity) {
|
|
transform_tohost_VkExtent2D(m_state, (VkExtent2D*)(pGranularity));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetRenderAreaGranularity 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)renderPass,
|
|
(unsigned long long)pGranularity);
|
|
}
|
|
vk->vkGetRenderAreaGranularity(unboxed_device, renderPass, pGranularity);
|
|
vkStream->unsetHandleMapping();
|
|
if (pGranularity) {
|
|
transform_fromhost_VkExtent2D(m_state, (VkExtent2D*)(pGranularity));
|
|
}
|
|
marshal_VkExtent2D(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExtent2D*)(pGranularity));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetRenderAreaGranularity(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, renderPass,
|
|
pGranularity);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateCommandPool: {
|
|
android::base::beginTrace("vkCreateCommandPool decode");
|
|
VkDevice device;
|
|
const VkCommandPoolCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkCommandPool* pCommandPool;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkCommandPoolCreateInfo));
|
|
reservedunmarshal_VkCommandPoolCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCommandPoolCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pCommandPool;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCommandPool, sizeof(VkCommandPool));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkCommandPool*)pCommandPool =
|
|
(VkCommandPool)(VkCommandPool)((VkCommandPool)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkCommandPoolCreateInfo(
|
|
m_state, (VkCommandPoolCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateCommandPool 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pCommandPool);
|
|
}
|
|
VkResult vkCreateCommandPool_VkResult_return = (VkResult)0;
|
|
vkCreateCommandPool_VkResult_return = m_state->on_vkCreateCommandPool(
|
|
&m_pool, device, pCreateInfo, pAllocator, pCommandPool);
|
|
if ((vkCreateCommandPool_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateCommandPool_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pCommandPool;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkCommandPool),
|
|
"handle map overwrite requires VkCommandPool to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkCommandPool((VkCommandPool*)pCommandPool,
|
|
1);
|
|
vkStream->write((VkCommandPool*)pCommandPool, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pCommandPool;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateCommandPool_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateCommandPool(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateCommandPool_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pCommandPool);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyCommandPool: {
|
|
android::base::beginTrace("vkDestroyCommandPool decode");
|
|
VkDevice device;
|
|
VkCommandPool commandPool;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for commandPool;
|
|
VkCommandPool boxed_commandPool_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandPool*)&commandPool =
|
|
(VkCommandPool)(VkCommandPool)((VkCommandPool)(*&cgen_var_1));
|
|
boxed_commandPool_preserve = commandPool;
|
|
commandPool = unbox_VkCommandPool(commandPool);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyCommandPool 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)commandPool,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyCommandPool(&m_pool, device, commandPool, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyCommandPool(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_commandPool_preserve, pAllocator);
|
|
}
|
|
delete_VkCommandPool(boxed_commandPool_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkResetCommandPool: {
|
|
android::base::beginTrace("vkResetCommandPool decode");
|
|
VkDevice device;
|
|
VkCommandPool commandPool;
|
|
VkCommandPoolResetFlags flags;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandPool*)&commandPool =
|
|
(VkCommandPool)unbox_VkCommandPool((VkCommandPool)(*&cgen_var_1));
|
|
memcpy((VkCommandPoolResetFlags*)&flags, *readStreamPtrPtr,
|
|
sizeof(VkCommandPoolResetFlags));
|
|
*readStreamPtrPtr += sizeof(VkCommandPoolResetFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkResetCommandPool 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)commandPool,
|
|
(unsigned long long)flags);
|
|
}
|
|
VkResult vkResetCommandPool_VkResult_return = (VkResult)0;
|
|
vkResetCommandPool_VkResult_return =
|
|
m_state->on_vkResetCommandPool(&m_pool, device, commandPool, flags);
|
|
if ((vkResetCommandPool_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkResetCommandPool_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkResetCommandPool_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkResetCommandPool(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkResetCommandPool_VkResult_return, device, commandPool, flags);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkAllocateCommandBuffers: {
|
|
android::base::beginTrace("vkAllocateCommandBuffers decode");
|
|
VkDevice device;
|
|
const VkCommandBufferAllocateInfo* pAllocateInfo;
|
|
VkCommandBuffer* pCommandBuffers;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pAllocateInfo,
|
|
sizeof(const VkCommandBufferAllocateInfo));
|
|
reservedunmarshal_VkCommandBufferAllocateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCommandBufferAllocateInfo*)(pAllocateInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pCommandBuffers;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCommandBuffers,
|
|
pAllocateInfo->commandBufferCount * sizeof(VkCommandBuffer));
|
|
if (pAllocateInfo->commandBufferCount) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * pAllocateInfo->commandBufferCount;
|
|
for (uint32_t k = 0; k < pAllocateInfo->commandBufferCount; ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkCommandBuffer*)pCommandBuffers) + k) =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)tmpval);
|
|
}
|
|
}
|
|
if (pAllocateInfo) {
|
|
transform_tohost_VkCommandBufferAllocateInfo(
|
|
m_state, (VkCommandBufferAllocateInfo*)(pAllocateInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAllocateCommandBuffers 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pAllocateInfo,
|
|
(unsigned long long)pCommandBuffers);
|
|
}
|
|
VkResult vkAllocateCommandBuffers_VkResult_return = (VkResult)0;
|
|
vkAllocateCommandBuffers_VkResult_return = m_state->on_vkAllocateCommandBuffers(
|
|
&m_pool, device, pAllocateInfo, pCommandBuffers);
|
|
if ((vkAllocateCommandBuffers_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAllocateCommandBuffers_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pAllocateInfo->commandBufferCount) {
|
|
uint64_t* cgen_var_2;
|
|
vkStream->alloc((void**)&cgen_var_2, pAllocateInfo->commandBufferCount * 8);
|
|
static_assert(
|
|
8 == sizeof(VkCommandBuffer),
|
|
"handle map overwrite requires VkCommandBuffer to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkCommandBuffer(
|
|
(VkCommandBuffer*)pCommandBuffers, pAllocateInfo->commandBufferCount);
|
|
vkStream->write((VkCommandBuffer*)pCommandBuffers,
|
|
8 * pAllocateInfo->commandBufferCount);
|
|
}
|
|
vkStream->write(&vkAllocateCommandBuffers_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAllocateCommandBuffers(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAllocateCommandBuffers_VkResult_return, device, pAllocateInfo,
|
|
pCommandBuffers);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkFreeCommandBuffers: {
|
|
android::base::beginTrace("vkFreeCommandBuffers decode");
|
|
VkDevice device;
|
|
VkCommandPool commandPool;
|
|
uint32_t commandBufferCount;
|
|
const VkCommandBuffer* pCommandBuffers;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandPool*)&commandPool =
|
|
(VkCommandPool)unbox_VkCommandPool((VkCommandPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&commandBufferCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual non dispatchable handle destroy unboxing for pCommandBuffers;
|
|
VkCommandBuffer* boxed_pCommandBuffers_preserve;
|
|
vkReadStream->alloc((void**)&boxed_pCommandBuffers_preserve,
|
|
((commandBufferCount)) * sizeof(VkCommandBuffer));
|
|
// WARNING PTR CHECK
|
|
memcpy((VkCommandBuffer**)&pCommandBuffers, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCommandBuffers);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCommandBuffers) {
|
|
vkReadStream->alloc((void**)&pCommandBuffers,
|
|
((commandBufferCount)) * sizeof(const VkCommandBuffer));
|
|
if (((commandBufferCount))) {
|
|
uint8_t* cgen_var_2_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((commandBufferCount));
|
|
for (uint32_t k = 0; k < ((commandBufferCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_2_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkCommandBuffer*)pCommandBuffers) + k) =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)tmpval);
|
|
}
|
|
}
|
|
}
|
|
for (uint32_t i = 0; i < ((commandBufferCount)); ++i) {
|
|
boxed_pCommandBuffers_preserve[i] = pCommandBuffers[i];
|
|
((VkCommandBuffer*)(pCommandBuffers))[i] =
|
|
unbox_VkCommandBuffer(pCommandBuffers[i]);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkFreeCommandBuffers 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)commandPool,
|
|
(unsigned long long)commandBufferCount,
|
|
(unsigned long long)pCommandBuffers);
|
|
}
|
|
m_state->on_vkFreeCommandBuffers(&m_pool, device, commandPool, commandBufferCount,
|
|
pCommandBuffers);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkFreeCommandBuffers(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, commandPool,
|
|
commandBufferCount, boxed_pCommandBuffers_preserve);
|
|
}
|
|
if (((commandBufferCount))) {
|
|
for (uint32_t i = 0; i < ((commandBufferCount)); ++i) {
|
|
delete_VkCommandBuffer(boxed_pCommandBuffers_preserve[i]);
|
|
}
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBeginCommandBuffer: {
|
|
android::base::beginTrace("vkBeginCommandBuffer decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCommandBufferBeginInfo* pBeginInfo;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pBeginInfo, sizeof(const VkCommandBufferBeginInfo));
|
|
reservedunmarshal_VkCommandBufferBeginInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCommandBufferBeginInfo*)(pBeginInfo),
|
|
readStreamPtrPtr);
|
|
if (pBeginInfo) {
|
|
transform_tohost_VkCommandBufferBeginInfo(
|
|
m_state, (VkCommandBufferBeginInfo*)(pBeginInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkBeginCommandBuffer 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pBeginInfo);
|
|
}
|
|
VkResult vkBeginCommandBuffer_VkResult_return = (VkResult)0;
|
|
vkBeginCommandBuffer_VkResult_return =
|
|
m_state->on_vkBeginCommandBuffer(&m_pool, commandBuffer, pBeginInfo, context);
|
|
if ((vkBeginCommandBuffer_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBeginCommandBuffer_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBeginCommandBuffer_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBeginCommandBuffer(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBeginCommandBuffer_VkResult_return, commandBuffer, pBeginInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkEndCommandBuffer: {
|
|
android::base::beginTrace("vkEndCommandBuffer decode");
|
|
VkCommandBuffer commandBuffer;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkEndCommandBuffer 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer);
|
|
}
|
|
VkResult vkEndCommandBuffer_VkResult_return = (VkResult)0;
|
|
vkEndCommandBuffer_VkResult_return =
|
|
m_state->on_vkEndCommandBuffer(&m_pool, commandBuffer, context);
|
|
if ((vkEndCommandBuffer_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkEndCommandBuffer_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkEndCommandBuffer_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEndCommandBuffer(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEndCommandBuffer_VkResult_return, commandBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkResetCommandBuffer: {
|
|
android::base::beginTrace("vkResetCommandBuffer decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkCommandBufferResetFlags flags;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
memcpy((VkCommandBufferResetFlags*)&flags, *readStreamPtrPtr,
|
|
sizeof(VkCommandBufferResetFlags));
|
|
*readStreamPtrPtr += sizeof(VkCommandBufferResetFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkResetCommandBuffer 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)flags);
|
|
}
|
|
VkResult vkResetCommandBuffer_VkResult_return = (VkResult)0;
|
|
vkResetCommandBuffer_VkResult_return =
|
|
m_state->on_vkResetCommandBuffer(&m_pool, commandBuffer, flags);
|
|
if ((vkResetCommandBuffer_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkResetCommandBuffer_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkResetCommandBuffer_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkResetCommandBuffer(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkResetCommandBuffer_VkResult_return, commandBuffer, flags);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBindPipeline: {
|
|
android::base::beginTrace("vkCmdBindPipeline decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineBindPoint pipelineBindPoint;
|
|
VkPipeline pipeline;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
memcpy((VkPipelineBindPoint*)&pipelineBindPoint, *readStreamPtrPtr,
|
|
sizeof(VkPipelineBindPoint));
|
|
*readStreamPtrPtr += sizeof(VkPipelineBindPoint);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdBindPipeline 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pipelineBindPoint, (unsigned long long)pipeline);
|
|
}
|
|
m_state->on_vkCmdBindPipeline(&m_pool, commandBuffer, pipelineBindPoint, pipeline);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBindPipeline(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer,
|
|
pipelineBindPoint, pipeline);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetViewport: {
|
|
android::base::beginTrace("vkCmdSetViewport decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstViewport;
|
|
uint32_t viewportCount;
|
|
const VkViewport* pViewports;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstViewport, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&viewportCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pViewports,
|
|
((viewportCount)) * sizeof(const VkViewport));
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
|
reservedunmarshal_VkViewport(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkViewport*)(pViewports + i), readStreamPtrPtr);
|
|
}
|
|
if (pViewports) {
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
|
transform_tohost_VkViewport(m_state, (VkViewport*)(pViewports + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetViewport 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstViewport, (unsigned long long)viewportCount,
|
|
(unsigned long long)pViewports);
|
|
}
|
|
vk->vkCmdSetViewport(unboxed_commandBuffer, firstViewport, viewportCount,
|
|
pViewports);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetViewport(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, firstViewport,
|
|
viewportCount, pViewports);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetScissor: {
|
|
android::base::beginTrace("vkCmdSetScissor decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstScissor;
|
|
uint32_t scissorCount;
|
|
const VkRect2D* pScissors;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstScissor, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&scissorCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pScissors, ((scissorCount)) * sizeof(const VkRect2D));
|
|
for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
|
|
reservedunmarshal_VkRect2D(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRect2D*)(pScissors + i), readStreamPtrPtr);
|
|
}
|
|
if (pScissors) {
|
|
for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
|
|
transform_tohost_VkRect2D(m_state, (VkRect2D*)(pScissors + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetScissor 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstScissor, (unsigned long long)scissorCount,
|
|
(unsigned long long)pScissors);
|
|
}
|
|
vk->vkCmdSetScissor(unboxed_commandBuffer, firstScissor, scissorCount, pScissors);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetScissor(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, firstScissor,
|
|
scissorCount, pScissors);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetLineWidth: {
|
|
android::base::beginTrace("vkCmdSetLineWidth decode");
|
|
VkCommandBuffer commandBuffer;
|
|
float lineWidth;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((float*)&lineWidth, *readStreamPtrPtr, sizeof(float));
|
|
*readStreamPtrPtr += sizeof(float);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetLineWidth 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer, (unsigned long long)lineWidth);
|
|
}
|
|
vk->vkCmdSetLineWidth(unboxed_commandBuffer, lineWidth);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetLineWidth(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, lineWidth);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetDepthBias: {
|
|
android::base::beginTrace("vkCmdSetDepthBias decode");
|
|
VkCommandBuffer commandBuffer;
|
|
float depthBiasConstantFactor;
|
|
float depthBiasClamp;
|
|
float depthBiasSlopeFactor;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((float*)&depthBiasConstantFactor, *readStreamPtrPtr, sizeof(float));
|
|
*readStreamPtrPtr += sizeof(float);
|
|
memcpy((float*)&depthBiasClamp, *readStreamPtrPtr, sizeof(float));
|
|
*readStreamPtrPtr += sizeof(float);
|
|
memcpy((float*)&depthBiasSlopeFactor, *readStreamPtrPtr, sizeof(float));
|
|
*readStreamPtrPtr += sizeof(float);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetDepthBias 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)depthBiasConstantFactor,
|
|
(unsigned long long)depthBiasClamp,
|
|
(unsigned long long)depthBiasSlopeFactor);
|
|
}
|
|
vk->vkCmdSetDepthBias(unboxed_commandBuffer, depthBiasConstantFactor,
|
|
depthBiasClamp, depthBiasSlopeFactor);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDepthBias(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetBlendConstants: {
|
|
android::base::beginTrace("vkCmdSetBlendConstants decode");
|
|
VkCommandBuffer commandBuffer;
|
|
float blendConstants[4];
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((float*)blendConstants, *readStreamPtrPtr, 4 * sizeof(const float));
|
|
*readStreamPtrPtr += 4 * sizeof(const float);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetBlendConstants 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)blendConstants);
|
|
}
|
|
vk->vkCmdSetBlendConstants(unboxed_commandBuffer, blendConstants);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetBlendConstants(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, blendConstants);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetDepthBounds: {
|
|
android::base::beginTrace("vkCmdSetDepthBounds decode");
|
|
VkCommandBuffer commandBuffer;
|
|
float minDepthBounds;
|
|
float maxDepthBounds;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((float*)&minDepthBounds, *readStreamPtrPtr, sizeof(float));
|
|
*readStreamPtrPtr += sizeof(float);
|
|
memcpy((float*)&maxDepthBounds, *readStreamPtrPtr, sizeof(float));
|
|
*readStreamPtrPtr += sizeof(float);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetDepthBounds 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)minDepthBounds, (unsigned long long)maxDepthBounds);
|
|
}
|
|
vk->vkCmdSetDepthBounds(unboxed_commandBuffer, minDepthBounds, maxDepthBounds);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDepthBounds(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, minDepthBounds,
|
|
maxDepthBounds);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetStencilCompareMask: {
|
|
android::base::beginTrace("vkCmdSetStencilCompareMask decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkStencilFaceFlags faceMask;
|
|
uint32_t compareMask;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkStencilFaceFlags*)&faceMask, *readStreamPtrPtr,
|
|
sizeof(VkStencilFaceFlags));
|
|
*readStreamPtrPtr += sizeof(VkStencilFaceFlags);
|
|
memcpy((uint32_t*)&compareMask, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetStencilCompareMask 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)faceMask, (unsigned long long)compareMask);
|
|
}
|
|
vk->vkCmdSetStencilCompareMask(unboxed_commandBuffer, faceMask, compareMask);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetStencilCompareMask(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, faceMask,
|
|
compareMask);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetStencilWriteMask: {
|
|
android::base::beginTrace("vkCmdSetStencilWriteMask decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkStencilFaceFlags faceMask;
|
|
uint32_t writeMask;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkStencilFaceFlags*)&faceMask, *readStreamPtrPtr,
|
|
sizeof(VkStencilFaceFlags));
|
|
*readStreamPtrPtr += sizeof(VkStencilFaceFlags);
|
|
memcpy((uint32_t*)&writeMask, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetStencilWriteMask 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)faceMask, (unsigned long long)writeMask);
|
|
}
|
|
vk->vkCmdSetStencilWriteMask(unboxed_commandBuffer, faceMask, writeMask);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetStencilWriteMask(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, faceMask,
|
|
writeMask);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetStencilReference: {
|
|
android::base::beginTrace("vkCmdSetStencilReference decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkStencilFaceFlags faceMask;
|
|
uint32_t reference;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkStencilFaceFlags*)&faceMask, *readStreamPtrPtr,
|
|
sizeof(VkStencilFaceFlags));
|
|
*readStreamPtrPtr += sizeof(VkStencilFaceFlags);
|
|
memcpy((uint32_t*)&reference, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetStencilReference 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)faceMask, (unsigned long long)reference);
|
|
}
|
|
vk->vkCmdSetStencilReference(unboxed_commandBuffer, faceMask, reference);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetStencilReference(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, faceMask,
|
|
reference);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBindDescriptorSets: {
|
|
android::base::beginTrace("vkCmdBindDescriptorSets decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineBindPoint pipelineBindPoint;
|
|
VkPipelineLayout layout;
|
|
uint32_t firstSet;
|
|
uint32_t descriptorSetCount;
|
|
const VkDescriptorSet* pDescriptorSets;
|
|
uint32_t dynamicOffsetCount;
|
|
const uint32_t* pDynamicOffsets;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
memcpy((VkPipelineBindPoint*)&pipelineBindPoint, *readStreamPtrPtr,
|
|
sizeof(VkPipelineBindPoint));
|
|
*readStreamPtrPtr += sizeof(VkPipelineBindPoint);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineLayout*)&layout =
|
|
(VkPipelineLayout)unbox_VkPipelineLayout((VkPipelineLayout)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&firstSet, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&descriptorSetCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pDescriptorSets,
|
|
((descriptorSetCount)) * sizeof(const VkDescriptorSet));
|
|
if (((descriptorSetCount))) {
|
|
uint8_t* cgen_var_2_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((descriptorSetCount));
|
|
for (uint32_t k = 0; k < ((descriptorSetCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_2_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkDescriptorSet*)pDescriptorSets) + k) =
|
|
(VkDescriptorSet)unbox_VkDescriptorSet((VkDescriptorSet)tmpval);
|
|
}
|
|
}
|
|
memcpy((uint32_t*)&dynamicOffsetCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pDynamicOffsets,
|
|
((dynamicOffsetCount)) * sizeof(const uint32_t));
|
|
memcpy((uint32_t*)pDynamicOffsets, *readStreamPtrPtr,
|
|
((dynamicOffsetCount)) * sizeof(const uint32_t));
|
|
*readStreamPtrPtr += ((dynamicOffsetCount)) * sizeof(const uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBindDescriptorSets 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pipelineBindPoint, (unsigned long long)layout,
|
|
(unsigned long long)firstSet, (unsigned long long)descriptorSetCount,
|
|
(unsigned long long)pDescriptorSets,
|
|
(unsigned long long)dynamicOffsetCount,
|
|
(unsigned long long)pDynamicOffsets);
|
|
}
|
|
m_state->on_vkCmdBindDescriptorSets(
|
|
&m_pool, commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount,
|
|
pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBindDescriptorSets(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets,
|
|
dynamicOffsetCount, pDynamicOffsets);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBindIndexBuffer: {
|
|
android::base::beginTrace("vkCmdBindIndexBuffer decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
VkIndexType indexType;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkIndexType*)&indexType, *readStreamPtrPtr, sizeof(VkIndexType));
|
|
*readStreamPtrPtr += sizeof(VkIndexType);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBindIndexBuffer 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)indexType);
|
|
}
|
|
vk->vkCmdBindIndexBuffer(unboxed_commandBuffer, buffer, offset, indexType);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBindIndexBuffer(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, indexType);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBindVertexBuffers: {
|
|
android::base::beginTrace("vkCmdBindVertexBuffers decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstBinding;
|
|
uint32_t bindingCount;
|
|
const VkBuffer* pBuffers;
|
|
const VkDeviceSize* pOffsets;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstBinding, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&bindingCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pBuffers, ((bindingCount)) * sizeof(const VkBuffer));
|
|
if (((bindingCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((bindingCount));
|
|
for (uint32_t k = 0; k < ((bindingCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkBuffer*)pBuffers) + k) = (VkBuffer)unbox_VkBuffer((VkBuffer)tmpval);
|
|
}
|
|
}
|
|
vkReadStream->alloc((void**)&pOffsets,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pOffsets, *readStreamPtrPtr,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
*readStreamPtrPtr += ((bindingCount)) * sizeof(const VkDeviceSize);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBindVertexBuffers 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstBinding, (unsigned long long)bindingCount,
|
|
(unsigned long long)pBuffers, (unsigned long long)pOffsets);
|
|
}
|
|
vk->vkCmdBindVertexBuffers(unboxed_commandBuffer, firstBinding, bindingCount,
|
|
pBuffers, pOffsets);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBindVertexBuffers(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
firstBinding, bindingCount, pBuffers, pOffsets);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDraw: {
|
|
android::base::beginTrace("vkCmdDraw decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t vertexCount;
|
|
uint32_t instanceCount;
|
|
uint32_t firstVertex;
|
|
uint32_t firstInstance;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&vertexCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&instanceCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&firstVertex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&firstInstance, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDraw 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)vertexCount, (unsigned long long)instanceCount,
|
|
(unsigned long long)firstVertex, (unsigned long long)firstInstance);
|
|
}
|
|
vk->vkCmdDraw(unboxed_commandBuffer, vertexCount, instanceCount, firstVertex,
|
|
firstInstance);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDraw(snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
commandBuffer, vertexCount, instanceCount,
|
|
firstVertex, firstInstance);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawIndexed: {
|
|
android::base::beginTrace("vkCmdDrawIndexed decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t indexCount;
|
|
uint32_t instanceCount;
|
|
uint32_t firstIndex;
|
|
int32_t vertexOffset;
|
|
uint32_t firstInstance;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&indexCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&instanceCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&firstIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((int32_t*)&vertexOffset, *readStreamPtrPtr, sizeof(int32_t));
|
|
*readStreamPtrPtr += sizeof(int32_t);
|
|
memcpy((uint32_t*)&firstInstance, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawIndexed 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)indexCount, (unsigned long long)instanceCount,
|
|
(unsigned long long)firstIndex, (unsigned long long)vertexOffset,
|
|
(unsigned long long)firstInstance);
|
|
}
|
|
vk->vkCmdDrawIndexed(unboxed_commandBuffer, indexCount, instanceCount, firstIndex,
|
|
vertexOffset, firstInstance);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndexed(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, indexCount,
|
|
instanceCount, firstIndex, vertexOffset, firstInstance);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawIndirect: {
|
|
android::base::beginTrace("vkCmdDrawIndirect decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
uint32_t drawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&drawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdDrawIndirect 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)drawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawIndirect(unboxed_commandBuffer, buffer, offset, drawCount, stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndirect(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, buffer, offset,
|
|
drawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawIndexedIndirect: {
|
|
android::base::beginTrace("vkCmdDrawIndexedIndirect decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
uint32_t drawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&drawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawIndexedIndirect 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)drawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawIndexedIndirect(unboxed_commandBuffer, buffer, offset, drawCount,
|
|
stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndexedIndirect(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, drawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDispatch: {
|
|
android::base::beginTrace("vkCmdDispatch decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t groupCountX;
|
|
uint32_t groupCountY;
|
|
uint32_t groupCountZ;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&groupCountX, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCountY, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCountZ, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdDispatch 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)groupCountX, (unsigned long long)groupCountY,
|
|
(unsigned long long)groupCountZ);
|
|
}
|
|
vk->vkCmdDispatch(unboxed_commandBuffer, groupCountX, groupCountY, groupCountZ);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDispatch(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, groupCountX,
|
|
groupCountY, groupCountZ);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDispatchIndirect: {
|
|
android::base::beginTrace("vkCmdDispatchIndirect decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdDispatchIndirect 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset);
|
|
}
|
|
vk->vkCmdDispatchIndirect(unboxed_commandBuffer, buffer, offset);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDispatchIndirect(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, buffer, offset);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyBuffer: {
|
|
android::base::beginTrace("vkCmdCopyBuffer decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer srcBuffer;
|
|
VkBuffer dstBuffer;
|
|
uint32_t regionCount;
|
|
const VkBufferCopy* pRegions;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&srcBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pRegions,
|
|
((regionCount)) * sizeof(const VkBufferCopy));
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
reservedunmarshal_VkBufferCopy(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferCopy*)(pRegions + i), readStreamPtrPtr);
|
|
}
|
|
if (pRegions) {
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
transform_tohost_VkBufferCopy(m_state, (VkBufferCopy*)(pRegions + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdCopyBuffer 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)srcBuffer, (unsigned long long)dstBuffer,
|
|
(unsigned long long)regionCount, (unsigned long long)pRegions);
|
|
}
|
|
vk->vkCmdCopyBuffer(unboxed_commandBuffer, srcBuffer, dstBuffer, regionCount,
|
|
pRegions);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyBuffer(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, srcBuffer,
|
|
dstBuffer, regionCount, pRegions);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyImage: {
|
|
android::base::beginTrace("vkCmdCopyImage decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkImage srcImage;
|
|
VkImageLayout srcImageLayout;
|
|
VkImage dstImage;
|
|
VkImageLayout dstImageLayout;
|
|
uint32_t regionCount;
|
|
const VkImageCopy* pRegions;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
memcpy((VkImageLayout*)&srcImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_2));
|
|
memcpy((VkImageLayout*)&dstImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pRegions, ((regionCount)) * sizeof(const VkImageCopy));
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
reservedunmarshal_VkImageCopy(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageCopy*)(pRegions + i), readStreamPtrPtr);
|
|
}
|
|
if (pRegions) {
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
transform_tohost_VkImageCopy(m_state, (VkImageCopy*)(pRegions + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdCopyImage 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)srcImage, (unsigned long long)srcImageLayout,
|
|
(unsigned long long)dstImage, (unsigned long long)dstImageLayout,
|
|
(unsigned long long)regionCount, (unsigned long long)pRegions);
|
|
}
|
|
m_state->on_vkCmdCopyImage(&m_pool, commandBuffer, srcImage, srcImageLayout,
|
|
dstImage, dstImageLayout, regionCount, pRegions);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyImage(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, srcImage,
|
|
srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBlitImage: {
|
|
android::base::beginTrace("vkCmdBlitImage decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkImage srcImage;
|
|
VkImageLayout srcImageLayout;
|
|
VkImage dstImage;
|
|
VkImageLayout dstImageLayout;
|
|
uint32_t regionCount;
|
|
const VkImageBlit* pRegions;
|
|
VkFilter filter;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
memcpy((VkImageLayout*)&srcImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_2));
|
|
memcpy((VkImageLayout*)&dstImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pRegions, ((regionCount)) * sizeof(const VkImageBlit));
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
reservedunmarshal_VkImageBlit(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageBlit*)(pRegions + i), readStreamPtrPtr);
|
|
}
|
|
memcpy((VkFilter*)&filter, *readStreamPtrPtr, sizeof(VkFilter));
|
|
*readStreamPtrPtr += sizeof(VkFilter);
|
|
if (pRegions) {
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
transform_tohost_VkImageBlit(m_state, (VkImageBlit*)(pRegions + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBlitImage 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)srcImage, (unsigned long long)srcImageLayout,
|
|
(unsigned long long)dstImage, (unsigned long long)dstImageLayout,
|
|
(unsigned long long)regionCount, (unsigned long long)pRegions,
|
|
(unsigned long long)filter);
|
|
}
|
|
vk->vkCmdBlitImage(unboxed_commandBuffer, srcImage, srcImageLayout, dstImage,
|
|
dstImageLayout, regionCount, pRegions, filter);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBlitImage(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, srcImage,
|
|
srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyBufferToImage: {
|
|
android::base::beginTrace("vkCmdCopyBufferToImage decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer srcBuffer;
|
|
VkImage dstImage;
|
|
VkImageLayout dstImageLayout;
|
|
uint32_t regionCount;
|
|
const VkBufferImageCopy* pRegions;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&srcBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_2));
|
|
memcpy((VkImageLayout*)&dstImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pRegions,
|
|
((regionCount)) * sizeof(const VkBufferImageCopy));
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
reservedunmarshal_VkBufferImageCopy(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferImageCopy*)(pRegions + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pRegions) {
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
transform_tohost_VkBufferImageCopy(m_state,
|
|
(VkBufferImageCopy*)(pRegions + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdCopyBufferToImage 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)srcBuffer, (unsigned long long)dstImage,
|
|
(unsigned long long)dstImageLayout, (unsigned long long)regionCount,
|
|
(unsigned long long)pRegions);
|
|
}
|
|
m_state->on_vkCmdCopyBufferToImage(&m_pool, commandBuffer, srcBuffer, dstImage,
|
|
dstImageLayout, regionCount, pRegions, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyBufferToImage(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, srcBuffer,
|
|
dstImage, dstImageLayout, regionCount, pRegions);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyImageToBuffer: {
|
|
android::base::beginTrace("vkCmdCopyImageToBuffer decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkImage srcImage;
|
|
VkImageLayout srcImageLayout;
|
|
VkBuffer dstBuffer;
|
|
uint32_t regionCount;
|
|
const VkBufferImageCopy* pRegions;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
memcpy((VkImageLayout*)&srcImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pRegions,
|
|
((regionCount)) * sizeof(const VkBufferImageCopy));
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
reservedunmarshal_VkBufferImageCopy(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferImageCopy*)(pRegions + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pRegions) {
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
transform_tohost_VkBufferImageCopy(m_state,
|
|
(VkBufferImageCopy*)(pRegions + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdCopyImageToBuffer 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)srcImage, (unsigned long long)srcImageLayout,
|
|
(unsigned long long)dstBuffer, (unsigned long long)regionCount,
|
|
(unsigned long long)pRegions);
|
|
}
|
|
m_state->on_vkCmdCopyImageToBuffer(&m_pool, commandBuffer, srcImage, srcImageLayout,
|
|
dstBuffer, regionCount, pRegions);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyImageToBuffer(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, srcImage,
|
|
srcImageLayout, dstBuffer, regionCount, pRegions);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdUpdateBuffer: {
|
|
android::base::beginTrace("vkCmdUpdateBuffer decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer dstBuffer;
|
|
VkDeviceSize dstOffset;
|
|
VkDeviceSize dataSize;
|
|
const void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&dstOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkDeviceSize*)&dataSize, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
vkReadStream->alloc((void**)&pData, ((dataSize)) * sizeof(const uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, ((dataSize)) * sizeof(const uint8_t));
|
|
*readStreamPtrPtr += ((dataSize)) * sizeof(const uint8_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdUpdateBuffer 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)dstBuffer,
|
|
(unsigned long long)dstOffset, (unsigned long long)dataSize,
|
|
(unsigned long long)pData);
|
|
}
|
|
vk->vkCmdUpdateBuffer(unboxed_commandBuffer, dstBuffer, dstOffset, dataSize, pData);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdUpdateBuffer(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, dstBuffer,
|
|
dstOffset, dataSize, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdFillBuffer: {
|
|
android::base::beginTrace("vkCmdFillBuffer decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer dstBuffer;
|
|
VkDeviceSize dstOffset;
|
|
VkDeviceSize size;
|
|
uint32_t data;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&dstOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkDeviceSize*)&size, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&data, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdFillBuffer 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)dstBuffer, (unsigned long long)dstOffset,
|
|
(unsigned long long)size, (unsigned long long)data);
|
|
}
|
|
vk->vkCmdFillBuffer(unboxed_commandBuffer, dstBuffer, dstOffset, size, data);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdFillBuffer(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, dstBuffer,
|
|
dstOffset, size, data);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdClearColorImage: {
|
|
android::base::beginTrace("vkCmdClearColorImage decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkImage image;
|
|
VkImageLayout imageLayout;
|
|
const VkClearColorValue* pColor;
|
|
uint32_t rangeCount;
|
|
const VkImageSubresourceRange* pRanges;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
memcpy((VkImageLayout*)&imageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
vkReadStream->alloc((void**)&pColor, sizeof(const VkClearColorValue));
|
|
reservedunmarshal_VkClearColorValue(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkClearColorValue*)(pColor), readStreamPtrPtr);
|
|
memcpy((uint32_t*)&rangeCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pRanges,
|
|
((rangeCount)) * sizeof(const VkImageSubresourceRange));
|
|
for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
|
|
reservedunmarshal_VkImageSubresourceRange(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageSubresourceRange*)(pRanges + i), readStreamPtrPtr);
|
|
}
|
|
if (pColor) {
|
|
transform_tohost_VkClearColorValue(m_state, (VkClearColorValue*)(pColor));
|
|
}
|
|
if (pRanges) {
|
|
for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
|
|
transform_tohost_VkImageSubresourceRange(
|
|
m_state, (VkImageSubresourceRange*)(pRanges + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdClearColorImage 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)image,
|
|
(unsigned long long)imageLayout, (unsigned long long)pColor,
|
|
(unsigned long long)rangeCount, (unsigned long long)pRanges);
|
|
}
|
|
vk->vkCmdClearColorImage(unboxed_commandBuffer, image, imageLayout, pColor,
|
|
rangeCount, pRanges);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdClearColorImage(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, image,
|
|
imageLayout, pColor, rangeCount, pRanges);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdClearDepthStencilImage: {
|
|
android::base::beginTrace("vkCmdClearDepthStencilImage decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkImage image;
|
|
VkImageLayout imageLayout;
|
|
const VkClearDepthStencilValue* pDepthStencil;
|
|
uint32_t rangeCount;
|
|
const VkImageSubresourceRange* pRanges;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
memcpy((VkImageLayout*)&imageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
vkReadStream->alloc((void**)&pDepthStencil, sizeof(const VkClearDepthStencilValue));
|
|
reservedunmarshal_VkClearDepthStencilValue(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkClearDepthStencilValue*)(pDepthStencil), readStreamPtrPtr);
|
|
memcpy((uint32_t*)&rangeCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pRanges,
|
|
((rangeCount)) * sizeof(const VkImageSubresourceRange));
|
|
for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
|
|
reservedunmarshal_VkImageSubresourceRange(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageSubresourceRange*)(pRanges + i), readStreamPtrPtr);
|
|
}
|
|
if (pDepthStencil) {
|
|
transform_tohost_VkClearDepthStencilValue(
|
|
m_state, (VkClearDepthStencilValue*)(pDepthStencil));
|
|
}
|
|
if (pRanges) {
|
|
for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
|
|
transform_tohost_VkImageSubresourceRange(
|
|
m_state, (VkImageSubresourceRange*)(pRanges + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdClearDepthStencilImage 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)image,
|
|
(unsigned long long)imageLayout, (unsigned long long)pDepthStencil,
|
|
(unsigned long long)rangeCount, (unsigned long long)pRanges);
|
|
}
|
|
vk->vkCmdClearDepthStencilImage(unboxed_commandBuffer, image, imageLayout,
|
|
pDepthStencil, rangeCount, pRanges);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdClearDepthStencilImage(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, image,
|
|
imageLayout, pDepthStencil, rangeCount, pRanges);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdClearAttachments: {
|
|
android::base::beginTrace("vkCmdClearAttachments decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t attachmentCount;
|
|
const VkClearAttachment* pAttachments;
|
|
uint32_t rectCount;
|
|
const VkClearRect* pRects;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&attachmentCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pAttachments,
|
|
((attachmentCount)) * sizeof(const VkClearAttachment));
|
|
for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i) {
|
|
reservedunmarshal_VkClearAttachment(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkClearAttachment*)(pAttachments + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
memcpy((uint32_t*)&rectCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pRects, ((rectCount)) * sizeof(const VkClearRect));
|
|
for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i) {
|
|
reservedunmarshal_VkClearRect(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkClearRect*)(pRects + i), readStreamPtrPtr);
|
|
}
|
|
if (pAttachments) {
|
|
for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i) {
|
|
transform_tohost_VkClearAttachment(m_state,
|
|
(VkClearAttachment*)(pAttachments + i));
|
|
}
|
|
}
|
|
if (pRects) {
|
|
for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i) {
|
|
transform_tohost_VkClearRect(m_state, (VkClearRect*)(pRects + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdClearAttachments 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)attachmentCount, (unsigned long long)pAttachments,
|
|
(unsigned long long)rectCount, (unsigned long long)pRects);
|
|
}
|
|
vk->vkCmdClearAttachments(unboxed_commandBuffer, attachmentCount, pAttachments,
|
|
rectCount, pRects);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdClearAttachments(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
attachmentCount, pAttachments, rectCount, pRects);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdResolveImage: {
|
|
android::base::beginTrace("vkCmdResolveImage decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkImage srcImage;
|
|
VkImageLayout srcImageLayout;
|
|
VkImage dstImage;
|
|
VkImageLayout dstImageLayout;
|
|
uint32_t regionCount;
|
|
const VkImageResolve* pRegions;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
memcpy((VkImageLayout*)&srcImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_2));
|
|
memcpy((VkImageLayout*)&dstImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pRegions,
|
|
((regionCount)) * sizeof(const VkImageResolve));
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
reservedunmarshal_VkImageResolve(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageResolve*)(pRegions + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pRegions) {
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
|
transform_tohost_VkImageResolve(m_state, (VkImageResolve*)(pRegions + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdResolveImage 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)srcImage, (unsigned long long)srcImageLayout,
|
|
(unsigned long long)dstImage, (unsigned long long)dstImageLayout,
|
|
(unsigned long long)regionCount, (unsigned long long)pRegions);
|
|
}
|
|
vk->vkCmdResolveImage(unboxed_commandBuffer, srcImage, srcImageLayout, dstImage,
|
|
dstImageLayout, regionCount, pRegions);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdResolveImage(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, srcImage,
|
|
srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetEvent: {
|
|
android::base::beginTrace("vkCmdSetEvent decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkEvent event;
|
|
VkPipelineStageFlags stageMask;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_1));
|
|
memcpy((VkPipelineStageFlags*)&stageMask, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlags));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetEvent 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)event,
|
|
(unsigned long long)stageMask);
|
|
}
|
|
vk->vkCmdSetEvent(unboxed_commandBuffer, event, stageMask);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetEvent(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, event, stageMask);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdResetEvent: {
|
|
android::base::beginTrace("vkCmdResetEvent decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkEvent event;
|
|
VkPipelineStageFlags stageMask;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_1));
|
|
memcpy((VkPipelineStageFlags*)&stageMask, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlags));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdResetEvent 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)event,
|
|
(unsigned long long)stageMask);
|
|
}
|
|
vk->vkCmdResetEvent(unboxed_commandBuffer, event, stageMask);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdResetEvent(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, event, stageMask);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdWaitEvents: {
|
|
android::base::beginTrace("vkCmdWaitEvents decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t eventCount;
|
|
const VkEvent* pEvents;
|
|
VkPipelineStageFlags srcStageMask;
|
|
VkPipelineStageFlags dstStageMask;
|
|
uint32_t memoryBarrierCount;
|
|
const VkMemoryBarrier* pMemoryBarriers;
|
|
uint32_t bufferMemoryBarrierCount;
|
|
const VkBufferMemoryBarrier* pBufferMemoryBarriers;
|
|
uint32_t imageMemoryBarrierCount;
|
|
const VkImageMemoryBarrier* pImageMemoryBarriers;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&eventCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pEvents, ((eventCount)) * sizeof(const VkEvent));
|
|
if (((eventCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((eventCount));
|
|
for (uint32_t k = 0; k < ((eventCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkEvent*)pEvents) + k) = (VkEvent)unbox_VkEvent((VkEvent)tmpval);
|
|
}
|
|
}
|
|
memcpy((VkPipelineStageFlags*)&srcStageMask, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlags));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags);
|
|
memcpy((VkPipelineStageFlags*)&dstStageMask, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlags));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags);
|
|
memcpy((uint32_t*)&memoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pMemoryBarriers,
|
|
((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
|
|
reservedunmarshal_VkMemoryBarrier(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryBarrier*)(pMemoryBarriers + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
memcpy((uint32_t*)&bufferMemoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pBufferMemoryBarriers,
|
|
((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
|
|
reservedunmarshal_VkBufferMemoryBarrier(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferMemoryBarrier*)(pBufferMemoryBarriers + i), readStreamPtrPtr);
|
|
}
|
|
memcpy((uint32_t*)&imageMemoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pImageMemoryBarriers,
|
|
((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
|
|
for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
|
|
reservedunmarshal_VkImageMemoryBarrier(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageMemoryBarrier*)(pImageMemoryBarriers + i), readStreamPtrPtr);
|
|
}
|
|
if (pMemoryBarriers) {
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
|
|
transform_tohost_VkMemoryBarrier(m_state,
|
|
(VkMemoryBarrier*)(pMemoryBarriers + i));
|
|
}
|
|
}
|
|
if (pBufferMemoryBarriers) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
|
|
transform_tohost_VkBufferMemoryBarrier(
|
|
m_state, (VkBufferMemoryBarrier*)(pBufferMemoryBarriers + i));
|
|
}
|
|
}
|
|
if (pImageMemoryBarriers) {
|
|
for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
|
|
transform_tohost_VkImageMemoryBarrier(
|
|
m_state, (VkImageMemoryBarrier*)(pImageMemoryBarriers + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdWaitEvents 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)eventCount, (unsigned long long)pEvents,
|
|
(unsigned long long)srcStageMask, (unsigned long long)dstStageMask,
|
|
(unsigned long long)memoryBarrierCount,
|
|
(unsigned long long)pMemoryBarriers,
|
|
(unsigned long long)bufferMemoryBarrierCount,
|
|
(unsigned long long)pBufferMemoryBarriers,
|
|
(unsigned long long)imageMemoryBarrierCount,
|
|
(unsigned long long)pImageMemoryBarriers);
|
|
}
|
|
vk->vkCmdWaitEvents(unboxed_commandBuffer, eventCount, pEvents, srcStageMask,
|
|
dstStageMask, memoryBarrierCount, pMemoryBarriers,
|
|
bufferMemoryBarrierCount, pBufferMemoryBarriers,
|
|
imageMemoryBarrierCount, pImageMemoryBarriers);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdWaitEvents(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, eventCount,
|
|
pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers,
|
|
bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount,
|
|
pImageMemoryBarriers);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdPipelineBarrier: {
|
|
android::base::beginTrace("vkCmdPipelineBarrier decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineStageFlags srcStageMask;
|
|
VkPipelineStageFlags dstStageMask;
|
|
VkDependencyFlags dependencyFlags;
|
|
uint32_t memoryBarrierCount;
|
|
const VkMemoryBarrier* pMemoryBarriers;
|
|
uint32_t bufferMemoryBarrierCount;
|
|
const VkBufferMemoryBarrier* pBufferMemoryBarriers;
|
|
uint32_t imageMemoryBarrierCount;
|
|
const VkImageMemoryBarrier* pImageMemoryBarriers;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
memcpy((VkPipelineStageFlags*)&srcStageMask, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlags));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags);
|
|
memcpy((VkPipelineStageFlags*)&dstStageMask, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlags));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags);
|
|
memcpy((VkDependencyFlags*)&dependencyFlags, *readStreamPtrPtr,
|
|
sizeof(VkDependencyFlags));
|
|
*readStreamPtrPtr += sizeof(VkDependencyFlags);
|
|
memcpy((uint32_t*)&memoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pMemoryBarriers,
|
|
((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
|
|
reservedunmarshal_VkMemoryBarrier(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryBarrier*)(pMemoryBarriers + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
memcpy((uint32_t*)&bufferMemoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pBufferMemoryBarriers,
|
|
((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
|
|
reservedunmarshal_VkBufferMemoryBarrier(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferMemoryBarrier*)(pBufferMemoryBarriers + i), readStreamPtrPtr);
|
|
}
|
|
memcpy((uint32_t*)&imageMemoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pImageMemoryBarriers,
|
|
((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
|
|
for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
|
|
reservedunmarshal_VkImageMemoryBarrier(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageMemoryBarrier*)(pImageMemoryBarriers + i), readStreamPtrPtr);
|
|
}
|
|
if (pMemoryBarriers) {
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
|
|
transform_tohost_VkMemoryBarrier(m_state,
|
|
(VkMemoryBarrier*)(pMemoryBarriers + i));
|
|
}
|
|
}
|
|
if (pBufferMemoryBarriers) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
|
|
transform_tohost_VkBufferMemoryBarrier(
|
|
m_state, (VkBufferMemoryBarrier*)(pBufferMemoryBarriers + i));
|
|
}
|
|
}
|
|
if (pImageMemoryBarriers) {
|
|
for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
|
|
transform_tohost_VkImageMemoryBarrier(
|
|
m_state, (VkImageMemoryBarrier*)(pImageMemoryBarriers + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdPipelineBarrier 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)srcStageMask, (unsigned long long)dstStageMask,
|
|
(unsigned long long)dependencyFlags,
|
|
(unsigned long long)memoryBarrierCount,
|
|
(unsigned long long)pMemoryBarriers,
|
|
(unsigned long long)bufferMemoryBarrierCount,
|
|
(unsigned long long)pBufferMemoryBarriers,
|
|
(unsigned long long)imageMemoryBarrierCount,
|
|
(unsigned long long)pImageMemoryBarriers);
|
|
}
|
|
m_state->on_vkCmdPipelineBarrier(
|
|
&m_pool, commandBuffer, srcStageMask, dstStageMask, dependencyFlags,
|
|
memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount,
|
|
pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdPipelineBarrier(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount,
|
|
pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers,
|
|
imageMemoryBarrierCount, pImageMemoryBarriers);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBeginQuery: {
|
|
android::base::beginTrace("vkCmdBeginQuery decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkQueryPool queryPool;
|
|
uint32_t query;
|
|
VkQueryControlFlags flags;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((VkQueryControlFlags*)&flags, *readStreamPtrPtr,
|
|
sizeof(VkQueryControlFlags));
|
|
*readStreamPtrPtr += sizeof(VkQueryControlFlags);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr, "stream %p: call vkCmdBeginQuery 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)queryPool,
|
|
(unsigned long long)query, (unsigned long long)flags);
|
|
}
|
|
vk->vkCmdBeginQuery(unboxed_commandBuffer, queryPool, query, flags);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginQuery(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, queryPool, query,
|
|
flags);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndQuery: {
|
|
android::base::beginTrace("vkCmdEndQuery decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkQueryPool queryPool;
|
|
uint32_t query;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdEndQuery 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)queryPool, (unsigned long long)query);
|
|
}
|
|
vk->vkCmdEndQuery(unboxed_commandBuffer, queryPool, query);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndQuery(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, queryPool, query);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdResetQueryPool: {
|
|
android::base::beginTrace("vkCmdResetQueryPool decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkQueryPool queryPool;
|
|
uint32_t firstQuery;
|
|
uint32_t queryCount;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&firstQuery, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&queryCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdResetQueryPool 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)queryPool, (unsigned long long)firstQuery,
|
|
(unsigned long long)queryCount);
|
|
}
|
|
vk->vkCmdResetQueryPool(unboxed_commandBuffer, queryPool, firstQuery, queryCount);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdResetQueryPool(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, queryPool,
|
|
firstQuery, queryCount);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdWriteTimestamp: {
|
|
android::base::beginTrace("vkCmdWriteTimestamp decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineStageFlagBits pipelineStage;
|
|
VkQueryPool queryPool;
|
|
uint32_t query;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkPipelineStageFlagBits*)&pipelineStage, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlagBits));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlagBits);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdWriteTimestamp 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pipelineStage, (unsigned long long)queryPool,
|
|
(unsigned long long)query);
|
|
}
|
|
vk->vkCmdWriteTimestamp(unboxed_commandBuffer, pipelineStage, queryPool, query);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdWriteTimestamp(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, pipelineStage,
|
|
queryPool, query);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyQueryPoolResults: {
|
|
android::base::beginTrace("vkCmdCopyQueryPoolResults decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkQueryPool queryPool;
|
|
uint32_t firstQuery;
|
|
uint32_t queryCount;
|
|
VkBuffer dstBuffer;
|
|
VkDeviceSize dstOffset;
|
|
VkDeviceSize stride;
|
|
VkQueryResultFlags flags;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&firstQuery, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&queryCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&dstOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkDeviceSize*)&stride, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkQueryResultFlags*)&flags, *readStreamPtrPtr, sizeof(VkQueryResultFlags));
|
|
*readStreamPtrPtr += sizeof(VkQueryResultFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdCopyQueryPoolResults 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)queryPool, (unsigned long long)firstQuery,
|
|
(unsigned long long)queryCount, (unsigned long long)dstBuffer,
|
|
(unsigned long long)dstOffset, (unsigned long long)stride,
|
|
(unsigned long long)flags);
|
|
}
|
|
vk->vkCmdCopyQueryPoolResults(unboxed_commandBuffer, queryPool, firstQuery,
|
|
queryCount, dstBuffer, dstOffset, stride, flags);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyQueryPoolResults(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, queryPool,
|
|
firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdPushConstants: {
|
|
android::base::beginTrace("vkCmdPushConstants decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineLayout layout;
|
|
VkShaderStageFlags stageFlags;
|
|
uint32_t offset;
|
|
uint32_t size;
|
|
const void* pValues;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineLayout*)&layout =
|
|
(VkPipelineLayout)unbox_VkPipelineLayout((VkPipelineLayout)(*&cgen_var_1));
|
|
memcpy((VkShaderStageFlags*)&stageFlags, *readStreamPtrPtr,
|
|
sizeof(VkShaderStageFlags));
|
|
*readStreamPtrPtr += sizeof(VkShaderStageFlags);
|
|
memcpy((uint32_t*)&offset, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&size, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pValues, ((size)) * sizeof(const uint8_t));
|
|
memcpy((void*)pValues, *readStreamPtrPtr, ((size)) * sizeof(const uint8_t));
|
|
*readStreamPtrPtr += ((size)) * sizeof(const uint8_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdPushConstants 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)layout,
|
|
(unsigned long long)stageFlags, (unsigned long long)offset,
|
|
(unsigned long long)size, (unsigned long long)pValues);
|
|
}
|
|
vk->vkCmdPushConstants(unboxed_commandBuffer, layout, stageFlags, offset, size,
|
|
pValues);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdPushConstants(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, layout,
|
|
stageFlags, offset, size, pValues);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBeginRenderPass: {
|
|
android::base::beginTrace("vkCmdBeginRenderPass decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkRenderPassBeginInfo* pRenderPassBegin;
|
|
VkSubpassContents contents;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pRenderPassBegin, sizeof(const VkRenderPassBeginInfo));
|
|
reservedunmarshal_VkRenderPassBeginInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRenderPassBeginInfo*)(pRenderPassBegin),
|
|
readStreamPtrPtr);
|
|
memcpy((VkSubpassContents*)&contents, *readStreamPtrPtr, sizeof(VkSubpassContents));
|
|
*readStreamPtrPtr += sizeof(VkSubpassContents);
|
|
if (pRenderPassBegin) {
|
|
transform_tohost_VkRenderPassBeginInfo(
|
|
m_state, (VkRenderPassBeginInfo*)(pRenderPassBegin));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdBeginRenderPass 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pRenderPassBegin, (unsigned long long)contents);
|
|
}
|
|
vk->vkCmdBeginRenderPass(unboxed_commandBuffer, pRenderPassBegin, contents);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginRenderPass(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pRenderPassBegin, contents);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdNextSubpass: {
|
|
android::base::beginTrace("vkCmdNextSubpass decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkSubpassContents contents;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkSubpassContents*)&contents, *readStreamPtrPtr, sizeof(VkSubpassContents));
|
|
*readStreamPtrPtr += sizeof(VkSubpassContents);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdNextSubpass 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer, (unsigned long long)contents);
|
|
}
|
|
vk->vkCmdNextSubpass(unboxed_commandBuffer, contents);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdNextSubpass(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, contents);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndRenderPass: {
|
|
android::base::beginTrace("vkCmdEndRenderPass decode");
|
|
VkCommandBuffer commandBuffer;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdEndRenderPass 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer);
|
|
}
|
|
vk->vkCmdEndRenderPass(unboxed_commandBuffer);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndRenderPass(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdExecuteCommands: {
|
|
android::base::beginTrace("vkCmdExecuteCommands decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t commandBufferCount;
|
|
const VkCommandBuffer* pCommandBuffers;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&commandBufferCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pCommandBuffers,
|
|
((commandBufferCount)) * sizeof(const VkCommandBuffer));
|
|
if (((commandBufferCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((commandBufferCount));
|
|
for (uint32_t k = 0; k < ((commandBufferCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkCommandBuffer*)pCommandBuffers) + k) =
|
|
(VkCommandBuffer)unbox_VkCommandBuffer((VkCommandBuffer)tmpval);
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdExecuteCommands 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)commandBufferCount,
|
|
(unsigned long long)pCommandBuffers);
|
|
}
|
|
m_state->on_vkCmdExecuteCommands(&m_pool, commandBuffer, commandBufferCount,
|
|
pCommandBuffers);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdExecuteCommands(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
commandBufferCount, pCommandBuffers);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_VERSION_1_1
|
|
case OP_vkEnumerateInstanceVersion: {
|
|
android::base::beginTrace("vkEnumerateInstanceVersion decode");
|
|
uint32_t* pApiVersion;
|
|
// Begin manual dispatchable handle unboxing for pApiVersion;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pApiVersion, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pApiVersion, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkEnumerateInstanceVersion 0x%llx \n",
|
|
ioStream, (unsigned long long)pApiVersion);
|
|
}
|
|
VkResult vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
|
|
vkEnumerateInstanceVersion_VkResult_return =
|
|
m_state->on_vkEnumerateInstanceVersion(&m_pool, pApiVersion);
|
|
if ((vkEnumerateInstanceVersion_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkEnumerateInstanceVersion_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint32_t*)pApiVersion, sizeof(uint32_t));
|
|
vkStream->write(&vkEnumerateInstanceVersion_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEnumerateInstanceVersion(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEnumerateInstanceVersion_VkResult_return, pApiVersion);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBindBufferMemory2: {
|
|
android::base::beginTrace("vkBindBufferMemory2 decode");
|
|
VkDevice device;
|
|
uint32_t bindInfoCount;
|
|
const VkBindBufferMemoryInfo* pBindInfos;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&bindInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pBindInfos,
|
|
((bindInfoCount)) * sizeof(const VkBindBufferMemoryInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
reservedunmarshal_VkBindBufferMemoryInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBindBufferMemoryInfo*)(pBindInfos + i), readStreamPtrPtr);
|
|
}
|
|
if (pBindInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
transform_tohost_VkBindBufferMemoryInfo(
|
|
m_state, (VkBindBufferMemoryInfo*)(pBindInfos + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkBindBufferMemory2 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)bindInfoCount,
|
|
(unsigned long long)pBindInfos);
|
|
}
|
|
VkResult vkBindBufferMemory2_VkResult_return = (VkResult)0;
|
|
vkBindBufferMemory2_VkResult_return =
|
|
m_state->on_vkBindBufferMemory2(&m_pool, device, bindInfoCount, pBindInfos);
|
|
if ((vkBindBufferMemory2_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBindBufferMemory2_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBindBufferMemory2_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBindBufferMemory2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBindBufferMemory2_VkResult_return, device, bindInfoCount, pBindInfos);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBindImageMemory2: {
|
|
android::base::beginTrace("vkBindImageMemory2 decode");
|
|
VkDevice device;
|
|
uint32_t bindInfoCount;
|
|
const VkBindImageMemoryInfo* pBindInfos;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&bindInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pBindInfos,
|
|
((bindInfoCount)) * sizeof(const VkBindImageMemoryInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
reservedunmarshal_VkBindImageMemoryInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBindImageMemoryInfo*)(pBindInfos + i), readStreamPtrPtr);
|
|
}
|
|
if (pBindInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
transform_tohost_VkBindImageMemoryInfo(
|
|
m_state, (VkBindImageMemoryInfo*)(pBindInfos + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkBindImageMemory2 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)bindInfoCount,
|
|
(unsigned long long)pBindInfos);
|
|
}
|
|
VkResult vkBindImageMemory2_VkResult_return = (VkResult)0;
|
|
vkBindImageMemory2_VkResult_return =
|
|
m_state->on_vkBindImageMemory2(&m_pool, device, bindInfoCount, pBindInfos);
|
|
if ((vkBindImageMemory2_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBindImageMemory2_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBindImageMemory2_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBindImageMemory2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBindImageMemory2_VkResult_return, device, bindInfoCount, pBindInfos);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceGroupPeerMemoryFeatures: {
|
|
android::base::beginTrace("vkGetDeviceGroupPeerMemoryFeatures decode");
|
|
VkDevice device;
|
|
uint32_t heapIndex;
|
|
uint32_t localDeviceIndex;
|
|
uint32_t remoteDeviceIndex;
|
|
VkPeerMemoryFeatureFlags* pPeerMemoryFeatures;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)&heapIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&localDeviceIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&remoteDeviceIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for pPeerMemoryFeatures;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
|
|
memcpy((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, *readStreamPtrPtr,
|
|
sizeof(VkPeerMemoryFeatureFlags));
|
|
*readStreamPtrPtr += sizeof(VkPeerMemoryFeatureFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceGroupPeerMemoryFeatures 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)heapIndex,
|
|
(unsigned long long)localDeviceIndex,
|
|
(unsigned long long)remoteDeviceIndex,
|
|
(unsigned long long)pPeerMemoryFeatures);
|
|
}
|
|
vk->vkGetDeviceGroupPeerMemoryFeatures(unboxed_device, heapIndex, localDeviceIndex,
|
|
remoteDeviceIndex, pPeerMemoryFeatures);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures,
|
|
sizeof(VkPeerMemoryFeatureFlags));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceGroupPeerMemoryFeatures(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, heapIndex,
|
|
localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetDeviceMask: {
|
|
android::base::beginTrace("vkCmdSetDeviceMask decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t deviceMask;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&deviceMask, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetDeviceMask 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer, (unsigned long long)deviceMask);
|
|
}
|
|
vk->vkCmdSetDeviceMask(unboxed_commandBuffer, deviceMask);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDeviceMask(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, deviceMask);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDispatchBase: {
|
|
android::base::beginTrace("vkCmdDispatchBase decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t baseGroupX;
|
|
uint32_t baseGroupY;
|
|
uint32_t baseGroupZ;
|
|
uint32_t groupCountX;
|
|
uint32_t groupCountY;
|
|
uint32_t groupCountZ;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&baseGroupX, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&baseGroupY, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&baseGroupZ, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCountX, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCountY, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCountZ, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDispatchBase 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)baseGroupX, (unsigned long long)baseGroupY,
|
|
(unsigned long long)baseGroupZ, (unsigned long long)groupCountX,
|
|
(unsigned long long)groupCountY, (unsigned long long)groupCountZ);
|
|
}
|
|
vk->vkCmdDispatchBase(unboxed_commandBuffer, baseGroupX, baseGroupY, baseGroupZ,
|
|
groupCountX, groupCountY, groupCountZ);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDispatchBase(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, baseGroupX,
|
|
baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkEnumeratePhysicalDeviceGroups: {
|
|
android::base::beginTrace("vkEnumeratePhysicalDeviceGroups decode");
|
|
VkInstance instance;
|
|
uint32_t* pPhysicalDeviceGroupCount;
|
|
VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
// Begin manual dispatchable handle unboxing for pPhysicalDeviceGroupCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPhysicalDeviceGroupCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPhysicalDeviceGroupCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPhysicalDeviceGroupCount) {
|
|
vkReadStream->alloc((void**)&pPhysicalDeviceGroupCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPhysicalDeviceGroupCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPhysicalDeviceGroupProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPhysicalDeviceGroupProperties**)&pPhysicalDeviceGroupProperties,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPhysicalDeviceGroupProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPhysicalDeviceGroupProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pPhysicalDeviceGroupProperties,
|
|
(*(pPhysicalDeviceGroupCount)) * sizeof(VkPhysicalDeviceGroupProperties));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
|
|
reservedunmarshal_VkPhysicalDeviceGroupProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPhysicalDeviceGroupCount) {
|
|
if (pPhysicalDeviceGroupProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
|
|
transform_tohost_VkPhysicalDeviceGroupProperties(
|
|
m_state,
|
|
(VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkEnumeratePhysicalDeviceGroups 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance,
|
|
(unsigned long long)pPhysicalDeviceGroupCount,
|
|
(unsigned long long)pPhysicalDeviceGroupProperties);
|
|
}
|
|
VkResult vkEnumeratePhysicalDeviceGroups_VkResult_return = (VkResult)0;
|
|
vkEnumeratePhysicalDeviceGroups_VkResult_return =
|
|
vk->vkEnumeratePhysicalDeviceGroups(unboxed_instance, pPhysicalDeviceGroupCount,
|
|
pPhysicalDeviceGroupProperties);
|
|
if ((vkEnumeratePhysicalDeviceGroups_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkEnumeratePhysicalDeviceGroups_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPhysicalDeviceGroupCount) {
|
|
vkStream->write((uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
|
|
}
|
|
if (pPhysicalDeviceGroupCount) {
|
|
if (pPhysicalDeviceGroupProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
|
|
transform_fromhost_VkPhysicalDeviceGroupProperties(
|
|
m_state,
|
|
(VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pPhysicalDeviceGroupProperties) {
|
|
if (pPhysicalDeviceGroupCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
|
|
marshal_VkPhysicalDeviceGroupProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkEnumeratePhysicalDeviceGroups_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEnumeratePhysicalDeviceGroups(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEnumeratePhysicalDeviceGroups_VkResult_return, instance,
|
|
pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetImageMemoryRequirements2: {
|
|
android::base::beginTrace("vkGetImageMemoryRequirements2 decode");
|
|
VkDevice device;
|
|
const VkImageMemoryRequirementsInfo2* pInfo;
|
|
VkMemoryRequirements2* pMemoryRequirements;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkImageMemoryRequirementsInfo2));
|
|
reservedunmarshal_VkImageMemoryRequirementsInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageMemoryRequirementsInfo2*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements2));
|
|
reservedunmarshal_VkMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkImageMemoryRequirementsInfo2(
|
|
m_state, (VkImageMemoryRequirementsInfo2*)(pInfo));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetImageMemoryRequirements2 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
m_state->on_vkGetImageMemoryRequirements2(&m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageMemoryRequirements2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetBufferMemoryRequirements2: {
|
|
android::base::beginTrace("vkGetBufferMemoryRequirements2 decode");
|
|
VkDevice device;
|
|
const VkBufferMemoryRequirementsInfo2* pInfo;
|
|
VkMemoryRequirements2* pMemoryRequirements;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkBufferMemoryRequirementsInfo2));
|
|
reservedunmarshal_VkBufferMemoryRequirementsInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferMemoryRequirementsInfo2*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements2));
|
|
reservedunmarshal_VkMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkBufferMemoryRequirementsInfo2(
|
|
m_state, (VkBufferMemoryRequirementsInfo2*)(pInfo));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetBufferMemoryRequirements2 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
m_state->on_vkGetBufferMemoryRequirements2(&m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBufferMemoryRequirements2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetImageSparseMemoryRequirements2: {
|
|
android::base::beginTrace("vkGetImageSparseMemoryRequirements2 decode");
|
|
VkDevice device;
|
|
const VkImageSparseMemoryRequirementsInfo2* pInfo;
|
|
uint32_t* pSparseMemoryRequirementCount;
|
|
VkSparseImageMemoryRequirements2* pSparseMemoryRequirements;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkImageSparseMemoryRequirementsInfo2));
|
|
reservedunmarshal_VkImageSparseMemoryRequirementsInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageSparseMemoryRequirementsInfo2*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pSparseMemoryRequirementCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pSparseMemoryRequirementCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSparseMemoryRequirementCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSparseMemoryRequirementCount) {
|
|
vkReadStream->alloc((void**)&pSparseMemoryRequirementCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pSparseMemoryRequirementCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSparseMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSparseImageMemoryRequirements2**)&pSparseMemoryRequirements,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSparseMemoryRequirements);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSparseMemoryRequirements) {
|
|
vkReadStream->alloc((void**)&pSparseMemoryRequirements,
|
|
(*(pSparseMemoryRequirementCount)) *
|
|
sizeof(VkSparseImageMemoryRequirements2));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
|
|
reservedunmarshal_VkSparseImageMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pInfo) {
|
|
transform_tohost_VkImageSparseMemoryRequirementsInfo2(
|
|
m_state, (VkImageSparseMemoryRequirementsInfo2*)(pInfo));
|
|
}
|
|
if (pSparseMemoryRequirementCount) {
|
|
if (pSparseMemoryRequirements) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
transform_tohost_VkSparseImageMemoryRequirements2(
|
|
m_state,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetImageSparseMemoryRequirements2 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pSparseMemoryRequirementCount,
|
|
(unsigned long long)pSparseMemoryRequirements);
|
|
}
|
|
vk->vkGetImageSparseMemoryRequirements2(unboxed_device, pInfo,
|
|
pSparseMemoryRequirementCount,
|
|
pSparseMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pSparseMemoryRequirementCount) {
|
|
vkStream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
|
|
}
|
|
if (pSparseMemoryRequirementCount) {
|
|
if (pSparseMemoryRequirements) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
transform_fromhost_VkSparseImageMemoryRequirements2(
|
|
m_state,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pSparseMemoryRequirements) {
|
|
if (pSparseMemoryRequirementCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
marshal_VkSparseImageMemoryRequirements2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageSparseMemoryRequirements2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pSparseMemoryRequirementCount, pSparseMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceFeatures2: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceFeatures2 decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkPhysicalDeviceFeatures2* pFeatures;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pFeatures;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFeatures, sizeof(VkPhysicalDeviceFeatures2));
|
|
reservedunmarshal_VkPhysicalDeviceFeatures2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceFeatures2*)(pFeatures), readStreamPtrPtr);
|
|
if (pFeatures) {
|
|
transform_tohost_VkPhysicalDeviceFeatures2(
|
|
m_state, (VkPhysicalDeviceFeatures2*)(pFeatures));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetPhysicalDeviceFeatures2 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pFeatures);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceFeatures2(&m_pool, physicalDevice, pFeatures);
|
|
vkStream->unsetHandleMapping();
|
|
if (pFeatures) {
|
|
transform_fromhost_VkPhysicalDeviceFeatures2(
|
|
m_state, (VkPhysicalDeviceFeatures2*)(pFeatures));
|
|
}
|
|
marshal_VkPhysicalDeviceFeatures2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceFeatures2*)(pFeatures));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceFeatures2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice, pFeatures);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceProperties2: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceProperties2 decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkPhysicalDeviceProperties2* pProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pProperties, sizeof(VkPhysicalDeviceProperties2));
|
|
reservedunmarshal_VkPhysicalDeviceProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceProperties2*)(pProperties), readStreamPtrPtr);
|
|
if (pProperties) {
|
|
transform_tohost_VkPhysicalDeviceProperties2(
|
|
m_state, (VkPhysicalDeviceProperties2*)(pProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceProperties2 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceProperties2(&m_pool, physicalDevice, pProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pProperties) {
|
|
transform_fromhost_VkPhysicalDeviceProperties2(
|
|
m_state, (VkPhysicalDeviceProperties2*)(pProperties));
|
|
}
|
|
marshal_VkPhysicalDeviceProperties2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceProperties2*)(pProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceProperties2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceFormatProperties2: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceFormatProperties2 decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkFormat format;
|
|
VkFormatProperties2* pFormatProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
memcpy((VkFormat*)&format, *readStreamPtrPtr, sizeof(VkFormat));
|
|
*readStreamPtrPtr += sizeof(VkFormat);
|
|
// Begin manual dispatchable handle unboxing for pFormatProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFormatProperties, sizeof(VkFormatProperties2));
|
|
reservedunmarshal_VkFormatProperties2(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFormatProperties2*)(pFormatProperties),
|
|
readStreamPtrPtr);
|
|
if (pFormatProperties) {
|
|
transform_tohost_VkFormatProperties2(m_state,
|
|
(VkFormatProperties2*)(pFormatProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceFormatProperties2 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)format, (unsigned long long)pFormatProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceFormatProperties2(&m_pool, physicalDevice, format,
|
|
pFormatProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pFormatProperties) {
|
|
transform_fromhost_VkFormatProperties2(
|
|
m_state, (VkFormatProperties2*)(pFormatProperties));
|
|
}
|
|
marshal_VkFormatProperties2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFormatProperties2*)(pFormatProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceFormatProperties2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice, format,
|
|
pFormatProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceImageFormatProperties2: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceImageFormatProperties2 decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo;
|
|
VkImageFormatProperties2* pImageFormatProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pImageFormatInfo,
|
|
sizeof(const VkPhysicalDeviceImageFormatInfo2));
|
|
reservedunmarshal_VkPhysicalDeviceImageFormatInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceImageFormatInfo2*)(pImageFormatInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pImageFormatProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pImageFormatProperties,
|
|
sizeof(VkImageFormatProperties2));
|
|
reservedunmarshal_VkImageFormatProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageFormatProperties2*)(pImageFormatProperties), readStreamPtrPtr);
|
|
if (pImageFormatInfo) {
|
|
transform_tohost_VkPhysicalDeviceImageFormatInfo2(
|
|
m_state, (VkPhysicalDeviceImageFormatInfo2*)(pImageFormatInfo));
|
|
}
|
|
if (pImageFormatProperties) {
|
|
transform_tohost_VkImageFormatProperties2(
|
|
m_state, (VkImageFormatProperties2*)(pImageFormatProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceImageFormatProperties2 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pImageFormatInfo,
|
|
(unsigned long long)pImageFormatProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceImageFormatProperties2_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceImageFormatProperties2_VkResult_return =
|
|
m_state->on_vkGetPhysicalDeviceImageFormatProperties2(
|
|
&m_pool, physicalDevice, pImageFormatInfo, pImageFormatProperties);
|
|
if ((vkGetPhysicalDeviceImageFormatProperties2_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceImageFormatProperties2_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pImageFormatProperties) {
|
|
transform_fromhost_VkImageFormatProperties2(
|
|
m_state, (VkImageFormatProperties2*)(pImageFormatProperties));
|
|
}
|
|
marshal_VkImageFormatProperties2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageFormatProperties2*)(pImageFormatProperties));
|
|
vkStream->write(&vkGetPhysicalDeviceImageFormatProperties2_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceImageFormatProperties2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceImageFormatProperties2_VkResult_return, physicalDevice,
|
|
pImageFormatInfo, pImageFormatProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceQueueFamilyProperties2: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceQueueFamilyProperties2 decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pQueueFamilyPropertyCount;
|
|
VkQueueFamilyProperties2* pQueueFamilyProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pQueueFamilyPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pQueueFamilyPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pQueueFamilyPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pQueueFamilyPropertyCount) {
|
|
vkReadStream->alloc((void**)&pQueueFamilyPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pQueueFamilyPropertyCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pQueueFamilyProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkQueueFamilyProperties2**)&pQueueFamilyProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pQueueFamilyProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pQueueFamilyProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pQueueFamilyProperties,
|
|
(*(pQueueFamilyPropertyCount)) * sizeof(VkQueueFamilyProperties2));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
reservedunmarshal_VkQueueFamilyProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkQueueFamilyProperties2*)(pQueueFamilyProperties + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pQueueFamilyPropertyCount) {
|
|
if (pQueueFamilyProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
transform_tohost_VkQueueFamilyProperties2(
|
|
m_state, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceQueueFamilyProperties2 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pQueueFamilyPropertyCount,
|
|
(unsigned long long)pQueueFamilyProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceQueueFamilyProperties2(
|
|
unboxed_physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pQueueFamilyPropertyCount) {
|
|
vkStream->write((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pQueueFamilyPropertyCount) {
|
|
if (pQueueFamilyProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
transform_fromhost_VkQueueFamilyProperties2(
|
|
m_state, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pQueueFamilyProperties) {
|
|
if (pQueueFamilyPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
marshal_VkQueueFamilyProperties2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceQueueFamilyProperties2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pQueueFamilyPropertyCount, pQueueFamilyProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceMemoryProperties2: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceMemoryProperties2 decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkPhysicalDeviceMemoryProperties2* pMemoryProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pMemoryProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryProperties,
|
|
sizeof(VkPhysicalDeviceMemoryProperties2));
|
|
reservedunmarshal_VkPhysicalDeviceMemoryProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), readStreamPtrPtr);
|
|
if (pMemoryProperties) {
|
|
transform_tohost_VkPhysicalDeviceMemoryProperties2(
|
|
m_state, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceMemoryProperties2 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pMemoryProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceMemoryProperties2(&m_pool, physicalDevice,
|
|
pMemoryProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryProperties) {
|
|
transform_fromhost_VkPhysicalDeviceMemoryProperties2(
|
|
m_state, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
|
|
}
|
|
marshal_VkPhysicalDeviceMemoryProperties2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceMemoryProperties2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pMemoryProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceSparseImageFormatProperties2: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSparseImageFormatProperties2 decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo;
|
|
uint32_t* pPropertyCount;
|
|
VkSparseImageFormatProperties2* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pFormatInfo,
|
|
sizeof(const VkPhysicalDeviceSparseImageFormatInfo2));
|
|
reservedunmarshal_VkPhysicalDeviceSparseImageFormatInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceSparseImageFormatInfo2*)(pFormatInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSparseImageFormatProperties2**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkSparseImageFormatProperties2));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkSparseImageFormatProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageFormatProperties2*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pFormatInfo) {
|
|
transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(
|
|
m_state, (VkPhysicalDeviceSparseImageFormatInfo2*)(pFormatInfo));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkSparseImageFormatProperties2(
|
|
m_state, (VkSparseImageFormatProperties2*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSparseImageFormatProperties2 "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pFormatInfo, (unsigned long long)pPropertyCount,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceSparseImageFormatProperties2(
|
|
unboxed_physicalDevice, pFormatInfo, pPropertyCount, pProperties);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkSparseImageFormatProperties2(
|
|
m_state, (VkSparseImageFormatProperties2*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkSparseImageFormatProperties2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageFormatProperties2*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSparseImageFormatProperties2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pFormatInfo, pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkTrimCommandPool: {
|
|
android::base::beginTrace("vkTrimCommandPool decode");
|
|
VkDevice device;
|
|
VkCommandPool commandPool;
|
|
VkCommandPoolTrimFlags flags;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandPool*)&commandPool =
|
|
(VkCommandPool)unbox_VkCommandPool((VkCommandPool)(*&cgen_var_1));
|
|
memcpy((VkCommandPoolTrimFlags*)&flags, *readStreamPtrPtr,
|
|
sizeof(VkCommandPoolTrimFlags));
|
|
*readStreamPtrPtr += sizeof(VkCommandPoolTrimFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkTrimCommandPool 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)commandPool,
|
|
(unsigned long long)flags);
|
|
}
|
|
vk->vkTrimCommandPool(unboxed_device, commandPool, flags);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkTrimCommandPool(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, commandPool, flags);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceQueue2: {
|
|
android::base::beginTrace("vkGetDeviceQueue2 decode");
|
|
VkDevice device;
|
|
const VkDeviceQueueInfo2* pQueueInfo;
|
|
VkQueue* pQueue;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pQueueInfo, sizeof(const VkDeviceQueueInfo2));
|
|
reservedunmarshal_VkDeviceQueueInfo2(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceQueueInfo2*)(pQueueInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pQueue;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pQueue, sizeof(VkQueue));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkQueue*)pQueue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_1));
|
|
if (pQueueInfo) {
|
|
transform_tohost_VkDeviceQueueInfo2(m_state, (VkDeviceQueueInfo2*)(pQueueInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetDeviceQueue2 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pQueueInfo,
|
|
(unsigned long long)pQueue);
|
|
}
|
|
m_state->on_vkGetDeviceQueue2(&m_pool, device, pQueueInfo, pQueue);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_2;
|
|
static_assert(8 == sizeof(VkQueue),
|
|
"handle map overwrite requires VkQueue to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkQueue((VkQueue*)pQueue, 1);
|
|
vkStream->write((VkQueue*)pQueue, 8 * 1);
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceQueue2(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, pQueueInfo, pQueue);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateSamplerYcbcrConversion: {
|
|
android::base::beginTrace("vkCreateSamplerYcbcrConversion decode");
|
|
VkDevice device;
|
|
const VkSamplerYcbcrConversionCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSamplerYcbcrConversion* pYcbcrConversion;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkSamplerYcbcrConversionCreateInfo));
|
|
reservedunmarshal_VkSamplerYcbcrConversionCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSamplerYcbcrConversionCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pYcbcrConversion;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pYcbcrConversion, sizeof(VkSamplerYcbcrConversion));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSamplerYcbcrConversion*)pYcbcrConversion =
|
|
(VkSamplerYcbcrConversion)(VkSamplerYcbcrConversion)((
|
|
VkSamplerYcbcrConversion)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkSamplerYcbcrConversionCreateInfo(
|
|
m_state, (VkSamplerYcbcrConversionCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateSamplerYcbcrConversion 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pYcbcrConversion);
|
|
}
|
|
VkResult vkCreateSamplerYcbcrConversion_VkResult_return = (VkResult)0;
|
|
vkCreateSamplerYcbcrConversion_VkResult_return =
|
|
m_state->on_vkCreateSamplerYcbcrConversion(&m_pool, device, pCreateInfo,
|
|
pAllocator, pYcbcrConversion);
|
|
if ((vkCreateSamplerYcbcrConversion_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateSamplerYcbcrConversion_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pYcbcrConversion;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkSamplerYcbcrConversion),
|
|
"handle map overwrite requires VkSamplerYcbcrConversion to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkSamplerYcbcrConversion(
|
|
(VkSamplerYcbcrConversion*)pYcbcrConversion, 1);
|
|
vkStream->write((VkSamplerYcbcrConversion*)pYcbcrConversion, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pYcbcrConversion;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateSamplerYcbcrConversion_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateSamplerYcbcrConversion(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateSamplerYcbcrConversion_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pYcbcrConversion);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroySamplerYcbcrConversion: {
|
|
android::base::beginTrace("vkDestroySamplerYcbcrConversion decode");
|
|
VkDevice device;
|
|
VkSamplerYcbcrConversion ycbcrConversion;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for ycbcrConversion;
|
|
VkSamplerYcbcrConversion boxed_ycbcrConversion_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSamplerYcbcrConversion*)&ycbcrConversion =
|
|
(VkSamplerYcbcrConversion)(VkSamplerYcbcrConversion)((
|
|
VkSamplerYcbcrConversion)(*&cgen_var_1));
|
|
boxed_ycbcrConversion_preserve = ycbcrConversion;
|
|
ycbcrConversion = unbox_VkSamplerYcbcrConversion(ycbcrConversion);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkDestroySamplerYcbcrConversion 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)ycbcrConversion,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroySamplerYcbcrConversion(&m_pool, device, ycbcrConversion,
|
|
pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroySamplerYcbcrConversion(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_ycbcrConversion_preserve, pAllocator);
|
|
}
|
|
delete_VkSamplerYcbcrConversion(boxed_ycbcrConversion_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateDescriptorUpdateTemplate: {
|
|
android::base::beginTrace("vkCreateDescriptorUpdateTemplate decode");
|
|
VkDevice device;
|
|
const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkDescriptorUpdateTemplateCreateInfo));
|
|
reservedunmarshal_VkDescriptorUpdateTemplateCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorUpdateTemplateCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pDescriptorUpdateTemplate;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDescriptorUpdateTemplate,
|
|
sizeof(VkDescriptorUpdateTemplate));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate =
|
|
(VkDescriptorUpdateTemplate)(VkDescriptorUpdateTemplate)((
|
|
VkDescriptorUpdateTemplate)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDescriptorUpdateTemplateCreateInfo(
|
|
m_state, (VkDescriptorUpdateTemplateCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateDescriptorUpdateTemplate 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator,
|
|
(unsigned long long)pDescriptorUpdateTemplate);
|
|
}
|
|
VkResult vkCreateDescriptorUpdateTemplate_VkResult_return = (VkResult)0;
|
|
vkCreateDescriptorUpdateTemplate_VkResult_return =
|
|
m_state->on_vkCreateDescriptorUpdateTemplate(
|
|
&m_pool, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
|
|
if ((vkCreateDescriptorUpdateTemplate_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDescriptorUpdateTemplate_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pDescriptorUpdateTemplate;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkDescriptorUpdateTemplate),
|
|
"handle map overwrite requires VkDescriptorUpdateTemplate to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate(
|
|
(VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 1);
|
|
vkStream->write((VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pDescriptorUpdateTemplate;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateDescriptorUpdateTemplate_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDescriptorUpdateTemplate(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDescriptorUpdateTemplate_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pDescriptorUpdateTemplate);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyDescriptorUpdateTemplate: {
|
|
android::base::beginTrace("vkDestroyDescriptorUpdateTemplate decode");
|
|
VkDevice device;
|
|
VkDescriptorUpdateTemplate descriptorUpdateTemplate;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for
|
|
// descriptorUpdateTemplate;
|
|
VkDescriptorUpdateTemplate boxed_descriptorUpdateTemplate_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate =
|
|
(VkDescriptorUpdateTemplate)(VkDescriptorUpdateTemplate)((
|
|
VkDescriptorUpdateTemplate)(*&cgen_var_1));
|
|
boxed_descriptorUpdateTemplate_preserve = descriptorUpdateTemplate;
|
|
descriptorUpdateTemplate =
|
|
unbox_VkDescriptorUpdateTemplate(descriptorUpdateTemplate);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkDestroyDescriptorUpdateTemplate 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)descriptorUpdateTemplate,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyDescriptorUpdateTemplate(&m_pool, device,
|
|
descriptorUpdateTemplate, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyDescriptorUpdateTemplate(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_descriptorUpdateTemplate_preserve, pAllocator);
|
|
}
|
|
delete_VkDescriptorUpdateTemplate(boxed_descriptorUpdateTemplate_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkUpdateDescriptorSetWithTemplate: {
|
|
android::base::beginTrace("vkUpdateDescriptorSetWithTemplate decode");
|
|
VkDevice device;
|
|
VkDescriptorSet descriptorSet;
|
|
VkDescriptorUpdateTemplate descriptorUpdateTemplate;
|
|
const void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorSet*)&descriptorSet =
|
|
(VkDescriptorSet)unbox_VkDescriptorSet((VkDescriptorSet)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate =
|
|
(VkDescriptorUpdateTemplate)unbox_VkDescriptorUpdateTemplate(
|
|
(VkDescriptorUpdateTemplate)(*&cgen_var_2));
|
|
// WARNING PTR CHECK
|
|
memcpy((void**)&pData, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pData);
|
|
*readStreamPtrPtr += 8;
|
|
if (pData) {
|
|
vkReadStream->alloc((void**)&pData, sizeof(const uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, sizeof(const uint8_t));
|
|
*readStreamPtrPtr += sizeof(const uint8_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkUpdateDescriptorSetWithTemplate 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)descriptorSet,
|
|
(unsigned long long)descriptorUpdateTemplate,
|
|
(unsigned long long)pData);
|
|
}
|
|
vk->vkUpdateDescriptorSetWithTemplate(unboxed_device, descriptorSet,
|
|
descriptorUpdateTemplate, pData);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkUpdateDescriptorSetWithTemplate(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, descriptorSet,
|
|
descriptorUpdateTemplate, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceExternalBufferProperties: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceExternalBufferProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo;
|
|
VkExternalBufferProperties* pExternalBufferProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pExternalBufferInfo,
|
|
sizeof(const VkPhysicalDeviceExternalBufferInfo));
|
|
reservedunmarshal_VkPhysicalDeviceExternalBufferInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceExternalBufferInfo*)(pExternalBufferInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pExternalBufferProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pExternalBufferProperties,
|
|
sizeof(VkExternalBufferProperties));
|
|
reservedunmarshal_VkExternalBufferProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalBufferProperties*)(pExternalBufferProperties), readStreamPtrPtr);
|
|
if (pExternalBufferInfo) {
|
|
m_state->transformImpl_VkPhysicalDeviceExternalBufferInfo_tohost(
|
|
pExternalBufferInfo, 1);
|
|
transform_tohost_VkPhysicalDeviceExternalBufferInfo(
|
|
m_state, (VkPhysicalDeviceExternalBufferInfo*)(pExternalBufferInfo));
|
|
}
|
|
if (pExternalBufferProperties) {
|
|
m_state->transformImpl_VkExternalBufferProperties_tohost(
|
|
pExternalBufferProperties, 1);
|
|
transform_tohost_VkExternalBufferProperties(
|
|
m_state, (VkExternalBufferProperties*)(pExternalBufferProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceExternalBufferProperties 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pExternalBufferInfo,
|
|
(unsigned long long)pExternalBufferProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceExternalBufferProperties(
|
|
unboxed_physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pExternalBufferProperties) {
|
|
m_state->transformImpl_VkExternalBufferProperties_fromhost(
|
|
pExternalBufferProperties, 1);
|
|
transform_fromhost_VkExternalBufferProperties(
|
|
m_state, (VkExternalBufferProperties*)(pExternalBufferProperties));
|
|
}
|
|
marshal_VkExternalBufferProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalBufferProperties*)(pExternalBufferProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceExternalBufferProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pExternalBufferInfo, pExternalBufferProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceExternalFenceProperties: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceExternalFenceProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo;
|
|
VkExternalFenceProperties* pExternalFenceProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pExternalFenceInfo,
|
|
sizeof(const VkPhysicalDeviceExternalFenceInfo));
|
|
reservedunmarshal_VkPhysicalDeviceExternalFenceInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceExternalFenceInfo*)(pExternalFenceInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pExternalFenceProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pExternalFenceProperties,
|
|
sizeof(VkExternalFenceProperties));
|
|
reservedunmarshal_VkExternalFenceProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalFenceProperties*)(pExternalFenceProperties), readStreamPtrPtr);
|
|
if (pExternalFenceInfo) {
|
|
transform_tohost_VkPhysicalDeviceExternalFenceInfo(
|
|
m_state, (VkPhysicalDeviceExternalFenceInfo*)(pExternalFenceInfo));
|
|
}
|
|
if (pExternalFenceProperties) {
|
|
transform_tohost_VkExternalFenceProperties(
|
|
m_state, (VkExternalFenceProperties*)(pExternalFenceProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceExternalFenceProperties 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pExternalFenceInfo,
|
|
(unsigned long long)pExternalFenceProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceExternalFenceProperties(
|
|
unboxed_physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pExternalFenceProperties) {
|
|
transform_fromhost_VkExternalFenceProperties(
|
|
m_state, (VkExternalFenceProperties*)(pExternalFenceProperties));
|
|
}
|
|
marshal_VkExternalFenceProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalFenceProperties*)(pExternalFenceProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceExternalFenceProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pExternalFenceInfo, pExternalFenceProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceExternalSemaphoreProperties: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceExternalSemaphoreProperties decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo;
|
|
VkExternalSemaphoreProperties* pExternalSemaphoreProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pExternalSemaphoreInfo,
|
|
sizeof(const VkPhysicalDeviceExternalSemaphoreInfo));
|
|
reservedunmarshal_VkPhysicalDeviceExternalSemaphoreInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceExternalSemaphoreInfo*)(pExternalSemaphoreInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pExternalSemaphoreProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pExternalSemaphoreProperties,
|
|
sizeof(VkExternalSemaphoreProperties));
|
|
reservedunmarshal_VkExternalSemaphoreProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties),
|
|
readStreamPtrPtr);
|
|
if (pExternalSemaphoreInfo) {
|
|
transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(
|
|
m_state, (VkPhysicalDeviceExternalSemaphoreInfo*)(pExternalSemaphoreInfo));
|
|
}
|
|
if (pExternalSemaphoreProperties) {
|
|
transform_tohost_VkExternalSemaphoreProperties(
|
|
m_state, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceExternalSemaphoreProperties 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pExternalSemaphoreInfo,
|
|
(unsigned long long)pExternalSemaphoreProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceExternalSemaphoreProperties(
|
|
&m_pool, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pExternalSemaphoreProperties) {
|
|
transform_fromhost_VkExternalSemaphoreProperties(
|
|
m_state, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
|
|
}
|
|
marshal_VkExternalSemaphoreProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceExternalSemaphoreProperties(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pExternalSemaphoreInfo, pExternalSemaphoreProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDescriptorSetLayoutSupport: {
|
|
android::base::beginTrace("vkGetDescriptorSetLayoutSupport decode");
|
|
VkDevice device;
|
|
const VkDescriptorSetLayoutCreateInfo* pCreateInfo;
|
|
VkDescriptorSetLayoutSupport* pSupport;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkDescriptorSetLayoutCreateInfo));
|
|
reservedunmarshal_VkDescriptorSetLayoutCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorSetLayoutCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pSupport;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSupport, sizeof(VkDescriptorSetLayoutSupport));
|
|
reservedunmarshal_VkDescriptorSetLayoutSupport(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorSetLayoutSupport*)(pSupport), readStreamPtrPtr);
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDescriptorSetLayoutCreateInfo(
|
|
m_state, (VkDescriptorSetLayoutCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pSupport) {
|
|
transform_tohost_VkDescriptorSetLayoutSupport(
|
|
m_state, (VkDescriptorSetLayoutSupport*)(pSupport));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetDescriptorSetLayoutSupport 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pSupport);
|
|
}
|
|
vk->vkGetDescriptorSetLayoutSupport(unboxed_device, pCreateInfo, pSupport);
|
|
vkStream->unsetHandleMapping();
|
|
if (pSupport) {
|
|
transform_fromhost_VkDescriptorSetLayoutSupport(
|
|
m_state, (VkDescriptorSetLayoutSupport*)(pSupport));
|
|
}
|
|
marshal_VkDescriptorSetLayoutSupport(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorSetLayoutSupport*)(pSupport));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDescriptorSetLayoutSupport(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pCreateInfo,
|
|
pSupport);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_VERSION_1_2
|
|
case OP_vkCmdDrawIndirectCount: {
|
|
android::base::beginTrace("vkCmdDrawIndirectCount decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
VkBuffer countBuffer;
|
|
VkDeviceSize countBufferOffset;
|
|
uint32_t maxDrawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&countBufferOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&maxDrawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawIndirectCount 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)countBuffer,
|
|
(unsigned long long)countBufferOffset, (unsigned long long)maxDrawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawIndirectCount(unboxed_commandBuffer, buffer, offset, countBuffer,
|
|
countBufferOffset, maxDrawCount, stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndirectCount(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, countBuffer, countBufferOffset, maxDrawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawIndexedIndirectCount: {
|
|
android::base::beginTrace("vkCmdDrawIndexedIndirectCount decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
VkBuffer countBuffer;
|
|
VkDeviceSize countBufferOffset;
|
|
uint32_t maxDrawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&countBufferOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&maxDrawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawIndexedIndirectCount 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)countBuffer,
|
|
(unsigned long long)countBufferOffset, (unsigned long long)maxDrawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawIndexedIndirectCount(unboxed_commandBuffer, buffer, offset,
|
|
countBuffer, countBufferOffset, maxDrawCount,
|
|
stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndexedIndirectCount(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, countBuffer, countBufferOffset, maxDrawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateRenderPass2: {
|
|
android::base::beginTrace("vkCreateRenderPass2 decode");
|
|
VkDevice device;
|
|
const VkRenderPassCreateInfo2* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkRenderPass* pRenderPass;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkRenderPassCreateInfo2));
|
|
reservedunmarshal_VkRenderPassCreateInfo2(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRenderPassCreateInfo2*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pRenderPass;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pRenderPass, sizeof(VkRenderPass));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkRenderPass*)pRenderPass =
|
|
(VkRenderPass)(VkRenderPass)((VkRenderPass)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkRenderPassCreateInfo2(
|
|
m_state, (VkRenderPassCreateInfo2*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateRenderPass2 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pRenderPass);
|
|
}
|
|
VkResult vkCreateRenderPass2_VkResult_return = (VkResult)0;
|
|
vkCreateRenderPass2_VkResult_return = m_state->on_vkCreateRenderPass2(
|
|
&m_pool, device, pCreateInfo, pAllocator, pRenderPass);
|
|
if ((vkCreateRenderPass2_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateRenderPass2_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pRenderPass;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkRenderPass),
|
|
"handle map overwrite requires VkRenderPass to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkRenderPass((VkRenderPass*)pRenderPass, 1);
|
|
vkStream->write((VkRenderPass*)pRenderPass, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pRenderPass;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateRenderPass2_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateRenderPass2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateRenderPass2_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pRenderPass);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBeginRenderPass2: {
|
|
android::base::beginTrace("vkCmdBeginRenderPass2 decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkRenderPassBeginInfo* pRenderPassBegin;
|
|
const VkSubpassBeginInfo* pSubpassBeginInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pRenderPassBegin, sizeof(const VkRenderPassBeginInfo));
|
|
reservedunmarshal_VkRenderPassBeginInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRenderPassBeginInfo*)(pRenderPassBegin),
|
|
readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pSubpassBeginInfo, sizeof(const VkSubpassBeginInfo));
|
|
reservedunmarshal_VkSubpassBeginInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo),
|
|
readStreamPtrPtr);
|
|
if (pRenderPassBegin) {
|
|
transform_tohost_VkRenderPassBeginInfo(
|
|
m_state, (VkRenderPassBeginInfo*)(pRenderPassBegin));
|
|
}
|
|
if (pSubpassBeginInfo) {
|
|
transform_tohost_VkSubpassBeginInfo(m_state,
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdBeginRenderPass2 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pRenderPassBegin,
|
|
(unsigned long long)pSubpassBeginInfo);
|
|
}
|
|
vk->vkCmdBeginRenderPass2(unboxed_commandBuffer, pRenderPassBegin,
|
|
pSubpassBeginInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginRenderPass2(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pRenderPassBegin, pSubpassBeginInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdNextSubpass2: {
|
|
android::base::beginTrace("vkCmdNextSubpass2 decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkSubpassBeginInfo* pSubpassBeginInfo;
|
|
const VkSubpassEndInfo* pSubpassEndInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pSubpassBeginInfo, sizeof(const VkSubpassBeginInfo));
|
|
reservedunmarshal_VkSubpassBeginInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo),
|
|
readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pSubpassEndInfo, sizeof(const VkSubpassEndInfo));
|
|
reservedunmarshal_VkSubpassEndInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo),
|
|
readStreamPtrPtr);
|
|
if (pSubpassBeginInfo) {
|
|
transform_tohost_VkSubpassBeginInfo(m_state,
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo));
|
|
}
|
|
if (pSubpassEndInfo) {
|
|
transform_tohost_VkSubpassEndInfo(m_state,
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdNextSubpass2 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pSubpassBeginInfo,
|
|
(unsigned long long)pSubpassEndInfo);
|
|
}
|
|
vk->vkCmdNextSubpass2(unboxed_commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdNextSubpass2(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer,
|
|
pSubpassBeginInfo, pSubpassEndInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndRenderPass2: {
|
|
android::base::beginTrace("vkCmdEndRenderPass2 decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkSubpassEndInfo* pSubpassEndInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pSubpassEndInfo, sizeof(const VkSubpassEndInfo));
|
|
reservedunmarshal_VkSubpassEndInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo),
|
|
readStreamPtrPtr);
|
|
if (pSubpassEndInfo) {
|
|
transform_tohost_VkSubpassEndInfo(m_state,
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdEndRenderPass2 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pSubpassEndInfo);
|
|
}
|
|
vk->vkCmdEndRenderPass2(unboxed_commandBuffer, pSubpassEndInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndRenderPass2(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer,
|
|
pSubpassEndInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkResetQueryPool: {
|
|
android::base::beginTrace("vkResetQueryPool decode");
|
|
VkDevice device;
|
|
VkQueryPool queryPool;
|
|
uint32_t firstQuery;
|
|
uint32_t queryCount;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&firstQuery, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&queryCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkResetQueryPool 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)queryPool,
|
|
(unsigned long long)firstQuery, (unsigned long long)queryCount);
|
|
}
|
|
vk->vkResetQueryPool(unboxed_device, queryPool, firstQuery, queryCount);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkResetQueryPool(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, queryPool, firstQuery,
|
|
queryCount);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetSemaphoreCounterValue: {
|
|
android::base::beginTrace("vkGetSemaphoreCounterValue decode");
|
|
VkDevice device;
|
|
VkSemaphore semaphore;
|
|
uint64_t* pValue;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSemaphore*)&semaphore =
|
|
(VkSemaphore)unbox_VkSemaphore((VkSemaphore)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pValue;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pValue, sizeof(uint64_t));
|
|
memcpy((uint64_t*)pValue, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetSemaphoreCounterValue 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)semaphore,
|
|
(unsigned long long)pValue);
|
|
}
|
|
VkResult vkGetSemaphoreCounterValue_VkResult_return = (VkResult)0;
|
|
vkGetSemaphoreCounterValue_VkResult_return =
|
|
vk->vkGetSemaphoreCounterValue(unboxed_device, semaphore, pValue);
|
|
if ((vkGetSemaphoreCounterValue_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetSemaphoreCounterValue_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint64_t*)pValue, sizeof(uint64_t));
|
|
vkStream->write(&vkGetSemaphoreCounterValue_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetSemaphoreCounterValue(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetSemaphoreCounterValue_VkResult_return, device, semaphore, pValue);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkWaitSemaphores: {
|
|
android::base::beginTrace("vkWaitSemaphores decode");
|
|
VkDevice device;
|
|
const VkSemaphoreWaitInfo* pWaitInfo;
|
|
uint64_t timeout;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pWaitInfo, sizeof(const VkSemaphoreWaitInfo));
|
|
reservedunmarshal_VkSemaphoreWaitInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSemaphoreWaitInfo*)(pWaitInfo),
|
|
readStreamPtrPtr);
|
|
memcpy((uint64_t*)&timeout, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (pWaitInfo) {
|
|
transform_tohost_VkSemaphoreWaitInfo(m_state,
|
|
(VkSemaphoreWaitInfo*)(pWaitInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkWaitSemaphores 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pWaitInfo,
|
|
(unsigned long long)timeout);
|
|
}
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
VkResult vkWaitSemaphores_VkResult_return = (VkResult)0;
|
|
vkWaitSemaphores_VkResult_return =
|
|
vk->vkWaitSemaphores(unboxed_device, pWaitInfo, timeout);
|
|
if ((vkWaitSemaphores_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkWaitSemaphores_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkWaitSemaphores_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkWaitSemaphores(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkWaitSemaphores_VkResult_return,
|
|
device, pWaitInfo, timeout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkSignalSemaphore: {
|
|
android::base::beginTrace("vkSignalSemaphore decode");
|
|
VkDevice device;
|
|
const VkSemaphoreSignalInfo* pSignalInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pSignalInfo, sizeof(const VkSemaphoreSignalInfo));
|
|
reservedunmarshal_VkSemaphoreSignalInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSemaphoreSignalInfo*)(pSignalInfo),
|
|
readStreamPtrPtr);
|
|
if (pSignalInfo) {
|
|
transform_tohost_VkSemaphoreSignalInfo(m_state,
|
|
(VkSemaphoreSignalInfo*)(pSignalInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkSignalSemaphore 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)device, (unsigned long long)pSignalInfo);
|
|
}
|
|
VkResult vkSignalSemaphore_VkResult_return = (VkResult)0;
|
|
vkSignalSemaphore_VkResult_return =
|
|
vk->vkSignalSemaphore(unboxed_device, pSignalInfo);
|
|
if ((vkSignalSemaphore_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkSignalSemaphore_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkSignalSemaphore_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSignalSemaphore(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkSignalSemaphore_VkResult_return, device, pSignalInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetBufferDeviceAddress: {
|
|
android::base::beginTrace("vkGetBufferDeviceAddress decode");
|
|
VkDevice device;
|
|
const VkBufferDeviceAddressInfo* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkBufferDeviceAddressInfo));
|
|
reservedunmarshal_VkBufferDeviceAddressInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(pInfo),
|
|
readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkBufferDeviceAddressInfo(m_state,
|
|
(VkBufferDeviceAddressInfo*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetBufferDeviceAddress 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
VkDeviceAddress vkGetBufferDeviceAddress_VkDeviceAddress_return =
|
|
(VkDeviceAddress)0;
|
|
vkGetBufferDeviceAddress_VkDeviceAddress_return =
|
|
vk->vkGetBufferDeviceAddress(unboxed_device, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetBufferDeviceAddress_VkDeviceAddress_return,
|
|
sizeof(VkDeviceAddress));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBufferDeviceAddress(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetBufferDeviceAddress_VkDeviceAddress_return, device, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetBufferOpaqueCaptureAddress: {
|
|
android::base::beginTrace("vkGetBufferOpaqueCaptureAddress decode");
|
|
VkDevice device;
|
|
const VkBufferDeviceAddressInfo* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkBufferDeviceAddressInfo));
|
|
reservedunmarshal_VkBufferDeviceAddressInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(pInfo),
|
|
readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkBufferDeviceAddressInfo(m_state,
|
|
(VkBufferDeviceAddressInfo*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetBufferOpaqueCaptureAddress 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
uint64_t vkGetBufferOpaqueCaptureAddress_uint64_t_return = (uint64_t)0;
|
|
vkGetBufferOpaqueCaptureAddress_uint64_t_return =
|
|
vk->vkGetBufferOpaqueCaptureAddress(unboxed_device, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetBufferOpaqueCaptureAddress_uint64_t_return, sizeof(uint64_t));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBufferOpaqueCaptureAddress(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetBufferOpaqueCaptureAddress_uint64_t_return, device, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceMemoryOpaqueCaptureAddress: {
|
|
android::base::beginTrace("vkGetDeviceMemoryOpaqueCaptureAddress decode");
|
|
VkDevice device;
|
|
const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkDeviceMemoryOpaqueCaptureAddressInfo));
|
|
reservedunmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceMemoryOpaqueCaptureAddressInfo*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkDeviceMemoryOpaqueCaptureAddressInfo(
|
|
m_state, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetDeviceMemoryOpaqueCaptureAddress 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
uint64_t vkGetDeviceMemoryOpaqueCaptureAddress_uint64_t_return = (uint64_t)0;
|
|
vkGetDeviceMemoryOpaqueCaptureAddress_uint64_t_return =
|
|
vk->vkGetDeviceMemoryOpaqueCaptureAddress(unboxed_device, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetDeviceMemoryOpaqueCaptureAddress_uint64_t_return,
|
|
sizeof(uint64_t));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceMemoryOpaqueCaptureAddress(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDeviceMemoryOpaqueCaptureAddress_uint64_t_return, device, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_surface
|
|
case OP_vkDestroySurfaceKHR: {
|
|
android::base::beginTrace("vkDestroySurfaceKHR decode");
|
|
VkInstance instance;
|
|
VkSurfaceKHR surface;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
// Begin manual non dispatchable handle destroy unboxing for surface;
|
|
VkSurfaceKHR boxed_surface_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSurfaceKHR*)&surface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_1));
|
|
boxed_surface_preserve = surface;
|
|
surface = unbox_VkSurfaceKHR(surface);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroySurfaceKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)surface,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroySurfaceKHR(unboxed_instance, surface, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroySurfaceKHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, instance,
|
|
boxed_surface_preserve, pAllocator);
|
|
}
|
|
delete_VkSurfaceKHR(boxed_surface_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceSurfaceSupportKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSurfaceSupportKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t queueFamilyIndex;
|
|
VkSurfaceKHR surface;
|
|
VkBool32* pSupported;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((uint32_t*)&queueFamilyIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSurfaceKHR*)&surface =
|
|
(VkSurfaceKHR)unbox_VkSurfaceKHR((VkSurfaceKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pSupported;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSupported, sizeof(VkBool32));
|
|
memcpy((VkBool32*)pSupported, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSurfaceSupportKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)queueFamilyIndex, (unsigned long long)surface,
|
|
(unsigned long long)pSupported);
|
|
}
|
|
VkResult vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceSurfaceSupportKHR(unboxed_physicalDevice,
|
|
queueFamilyIndex, surface, pSupported);
|
|
if ((vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((VkBool32*)pSupported, sizeof(VkBool32));
|
|
vkStream->write(&vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSurfaceSupportKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return, physicalDevice,
|
|
queueFamilyIndex, surface, pSupported);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceSurfaceCapabilitiesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSurfaceCapabilitiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkSurfaceKHR surface;
|
|
VkSurfaceCapabilitiesKHR* pSurfaceCapabilities;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSurfaceKHR*)&surface =
|
|
(VkSurfaceKHR)unbox_VkSurfaceKHR((VkSurfaceKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pSurfaceCapabilities;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurfaceCapabilities,
|
|
sizeof(VkSurfaceCapabilitiesKHR));
|
|
reservedunmarshal_VkSurfaceCapabilitiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities), readStreamPtrPtr);
|
|
if (pSurfaceCapabilities) {
|
|
transform_tohost_VkSurfaceCapabilitiesKHR(
|
|
m_state, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSurfaceCapabilitiesKHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)surface, (unsigned long long)pSurfaceCapabilities);
|
|
}
|
|
VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceSurfaceCapabilitiesKHR(unboxed_physicalDevice, surface,
|
|
pSurfaceCapabilities);
|
|
if ((vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pSurfaceCapabilities) {
|
|
transform_fromhost_VkSurfaceCapabilitiesKHR(
|
|
m_state, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
|
|
}
|
|
marshal_VkSurfaceCapabilitiesKHR(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
|
|
vkStream->write(&vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return, physicalDevice,
|
|
surface, pSurfaceCapabilities);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceSurfaceFormatsKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSurfaceFormatsKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkSurfaceKHR surface;
|
|
uint32_t* pSurfaceFormatCount;
|
|
VkSurfaceFormatKHR* pSurfaceFormats;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSurfaceKHR*)&surface =
|
|
(VkSurfaceKHR)unbox_VkSurfaceKHR((VkSurfaceKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pSurfaceFormatCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pSurfaceFormatCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSurfaceFormatCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSurfaceFormatCount) {
|
|
vkReadStream->alloc((void**)&pSurfaceFormatCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pSurfaceFormatCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurfaceFormats;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSurfaceFormatKHR**)&pSurfaceFormats, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSurfaceFormats);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSurfaceFormats) {
|
|
vkReadStream->alloc((void**)&pSurfaceFormats,
|
|
(*(pSurfaceFormatCount)) * sizeof(VkSurfaceFormatKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i) {
|
|
reservedunmarshal_VkSurfaceFormatKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceFormatKHR*)(pSurfaceFormats + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pSurfaceFormatCount) {
|
|
if (pSurfaceFormats) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i) {
|
|
transform_tohost_VkSurfaceFormatKHR(
|
|
m_state, (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSurfaceFormatsKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)surface, (unsigned long long)pSurfaceFormatCount,
|
|
(unsigned long long)pSurfaceFormats);
|
|
}
|
|
VkResult vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceSurfaceFormatsKHR(unboxed_physicalDevice, surface,
|
|
pSurfaceFormatCount, pSurfaceFormats);
|
|
if ((vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pSurfaceFormatCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pSurfaceFormatCount) {
|
|
vkStream->write((uint32_t*)pSurfaceFormatCount, sizeof(uint32_t));
|
|
}
|
|
if (pSurfaceFormatCount) {
|
|
if (pSurfaceFormats) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i) {
|
|
transform_fromhost_VkSurfaceFormatKHR(
|
|
m_state, (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pSurfaceFormats;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pSurfaceFormats) {
|
|
if (pSurfaceFormatCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i) {
|
|
marshal_VkSurfaceFormatKHR(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceFormatKHR*)(pSurfaceFormats + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSurfaceFormatsKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return, physicalDevice,
|
|
surface, pSurfaceFormatCount, pSurfaceFormats);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceSurfacePresentModesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSurfacePresentModesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkSurfaceKHR surface;
|
|
uint32_t* pPresentModeCount;
|
|
VkPresentModeKHR* pPresentModes;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSurfaceKHR*)&surface =
|
|
(VkSurfaceKHR)unbox_VkSurfaceKHR((VkSurfaceKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pPresentModeCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPresentModeCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPresentModeCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPresentModeCount) {
|
|
vkReadStream->alloc((void**)&pPresentModeCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPresentModeCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPresentModes;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPresentModeKHR**)&pPresentModes, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPresentModes);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPresentModes) {
|
|
vkReadStream->alloc((void**)&pPresentModes,
|
|
(*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
|
|
memcpy((VkPresentModeKHR*)pPresentModes, *readStreamPtrPtr,
|
|
(*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
|
|
*readStreamPtrPtr += (*(pPresentModeCount)) * sizeof(VkPresentModeKHR);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSurfacePresentModesKHR 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)surface, (unsigned long long)pPresentModeCount,
|
|
(unsigned long long)pPresentModes);
|
|
}
|
|
VkResult vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceSurfacePresentModesKHR(unboxed_physicalDevice, surface,
|
|
pPresentModeCount, pPresentModes);
|
|
if ((vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pPresentModeCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pPresentModeCount) {
|
|
vkStream->write((uint32_t*)pPresentModeCount, sizeof(uint32_t));
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pPresentModes;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pPresentModes) {
|
|
vkStream->write((VkPresentModeKHR*)pPresentModes,
|
|
(*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSurfacePresentModesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return, physicalDevice,
|
|
surface, pPresentModeCount, pPresentModes);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_swapchain
|
|
case OP_vkCreateSwapchainKHR: {
|
|
android::base::beginTrace("vkCreateSwapchainKHR decode");
|
|
VkDevice device;
|
|
const VkSwapchainCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSwapchainKHR* pSwapchain;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkSwapchainCreateInfoKHR));
|
|
reservedunmarshal_VkSwapchainCreateInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSwapchainCreateInfoKHR*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSwapchain;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSwapchain, sizeof(VkSwapchainKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSwapchainKHR*)pSwapchain =
|
|
(VkSwapchainKHR)(VkSwapchainKHR)((VkSwapchainKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkSwapchainCreateInfoKHR(
|
|
m_state, (VkSwapchainCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateSwapchainKHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSwapchain);
|
|
}
|
|
VkResult vkCreateSwapchainKHR_VkResult_return = (VkResult)0;
|
|
vkCreateSwapchainKHR_VkResult_return =
|
|
vk->vkCreateSwapchainKHR(unboxed_device, pCreateInfo, pAllocator, pSwapchain);
|
|
if ((vkCreateSwapchainKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateSwapchainKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pSwapchain;
|
|
if (vkCreateSwapchainKHR_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkSwapchainKHR),
|
|
"handle map overwrite requires VkSwapchainKHR to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkSwapchainKHR((VkSwapchainKHR*)pSwapchain,
|
|
1);
|
|
vkStream->write((VkSwapchainKHR*)pSwapchain, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pSwapchain;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateSwapchainKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateSwapchainKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateSwapchainKHR_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pSwapchain);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroySwapchainKHR: {
|
|
android::base::beginTrace("vkDestroySwapchainKHR decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual non dispatchable handle destroy unboxing for swapchain;
|
|
VkSwapchainKHR boxed_swapchain_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)(VkSwapchainKHR)((VkSwapchainKHR)(*&cgen_var_1));
|
|
boxed_swapchain_preserve = swapchain;
|
|
swapchain = unbox_VkSwapchainKHR(swapchain);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroySwapchainKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroySwapchainKHR(unboxed_device, swapchain, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroySwapchainKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_swapchain_preserve, pAllocator);
|
|
}
|
|
delete_VkSwapchainKHR(boxed_swapchain_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetSwapchainImagesKHR: {
|
|
android::base::beginTrace("vkGetSwapchainImagesKHR decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
uint32_t* pSwapchainImageCount;
|
|
VkImage* pSwapchainImages;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pSwapchainImageCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pSwapchainImageCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSwapchainImageCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSwapchainImageCount) {
|
|
vkReadStream->alloc((void**)&pSwapchainImageCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pSwapchainImageCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSwapchainImages;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkImage**)&pSwapchainImages, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSwapchainImages);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSwapchainImages) {
|
|
vkReadStream->alloc((void**)&pSwapchainImages,
|
|
(*(pSwapchainImageCount)) * sizeof(VkImage));
|
|
if ((*(pSwapchainImageCount))) {
|
|
uint8_t* cgen_var_3_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * (*(pSwapchainImageCount));
|
|
if (pSwapchainImageCount) {
|
|
for (uint32_t k = 0; k < (*(pSwapchainImageCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_3_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkImage*)pSwapchainImages) + k) =
|
|
(VkImage)(VkImage)((VkImage)tmpval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetSwapchainImagesKHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain,
|
|
(unsigned long long)pSwapchainImageCount,
|
|
(unsigned long long)pSwapchainImages);
|
|
}
|
|
VkResult vkGetSwapchainImagesKHR_VkResult_return = (VkResult)0;
|
|
vkGetSwapchainImagesKHR_VkResult_return = vk->vkGetSwapchainImagesKHR(
|
|
unboxed_device, swapchain, pSwapchainImageCount, pSwapchainImages);
|
|
if ((vkGetSwapchainImagesKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetSwapchainImagesKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pSwapchainImageCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pSwapchainImageCount) {
|
|
vkStream->write((uint32_t*)pSwapchainImageCount, sizeof(uint32_t));
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pSwapchainImages;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pSwapchainImages) {
|
|
if ((*(pSwapchainImageCount))) {
|
|
uint64_t* cgen_var_5_0;
|
|
vkStream->alloc((void**)&cgen_var_5_0, (*(pSwapchainImageCount)) * 8);
|
|
vkStream->handleMapping()->mapHandles_VkImage_u64(
|
|
pSwapchainImages, cgen_var_5_0, (*(pSwapchainImageCount)));
|
|
vkStream->write((uint64_t*)cgen_var_5_0, (*(pSwapchainImageCount)) * 8);
|
|
}
|
|
}
|
|
vkStream->write(&vkGetSwapchainImagesKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetSwapchainImagesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetSwapchainImagesKHR_VkResult_return, device, swapchain,
|
|
pSwapchainImageCount, pSwapchainImages);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkAcquireNextImageKHR: {
|
|
android::base::beginTrace("vkAcquireNextImageKHR decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
uint64_t timeout;
|
|
VkSemaphore semaphore;
|
|
VkFence fence;
|
|
uint32_t* pImageIndex;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
memcpy((uint64_t*)&timeout, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSemaphore*)&semaphore =
|
|
(VkSemaphore)unbox_VkSemaphore((VkSemaphore)(*&cgen_var_2));
|
|
uint64_t cgen_var_3;
|
|
memcpy((uint64_t*)&cgen_var_3, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFence*)&fence = (VkFence)unbox_VkFence((VkFence)(*&cgen_var_3));
|
|
// Begin manual dispatchable handle unboxing for pImageIndex;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pImageIndex, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pImageIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAcquireNextImageKHR 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain,
|
|
(unsigned long long)timeout, (unsigned long long)semaphore,
|
|
(unsigned long long)fence, (unsigned long long)pImageIndex);
|
|
}
|
|
VkResult vkAcquireNextImageKHR_VkResult_return = (VkResult)0;
|
|
vkAcquireNextImageKHR_VkResult_return = vk->vkAcquireNextImageKHR(
|
|
unboxed_device, swapchain, timeout, semaphore, fence, pImageIndex);
|
|
if ((vkAcquireNextImageKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAcquireNextImageKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint32_t*)pImageIndex, sizeof(uint32_t));
|
|
vkStream->write(&vkAcquireNextImageKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAcquireNextImageKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAcquireNextImageKHR_VkResult_return, device, swapchain, timeout,
|
|
semaphore, fence, pImageIndex);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueuePresentKHR: {
|
|
android::base::beginTrace("vkQueuePresentKHR decode");
|
|
VkQueue queue;
|
|
const VkPresentInfoKHR* pPresentInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
auto unboxed_queue = unbox_VkQueue(queue);
|
|
auto vk = dispatch_VkQueue(queue);
|
|
// End manual dispatchable handle unboxing for queue;
|
|
vkReadStream->alloc((void**)&pPresentInfo, sizeof(const VkPresentInfoKHR));
|
|
reservedunmarshal_VkPresentInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPresentInfoKHR*)(pPresentInfo),
|
|
readStreamPtrPtr);
|
|
if (pPresentInfo) {
|
|
transform_tohost_VkPresentInfoKHR(m_state, (VkPresentInfoKHR*)(pPresentInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkQueuePresentKHR 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)queue, (unsigned long long)pPresentInfo);
|
|
}
|
|
VkResult vkQueuePresentKHR_VkResult_return = (VkResult)0;
|
|
vkQueuePresentKHR_VkResult_return =
|
|
vk->vkQueuePresentKHR(unboxed_queue, pPresentInfo);
|
|
if ((vkQueuePresentKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkQueuePresentKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkQueuePresentKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueuePresentKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkQueuePresentKHR_VkResult_return, queue, pPresentInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceGroupPresentCapabilitiesKHR: {
|
|
android::base::beginTrace("vkGetDeviceGroupPresentCapabilitiesKHR decode");
|
|
VkDevice device;
|
|
VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual dispatchable handle unboxing for pDeviceGroupPresentCapabilities;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDeviceGroupPresentCapabilities,
|
|
sizeof(VkDeviceGroupPresentCapabilitiesKHR));
|
|
reservedunmarshal_VkDeviceGroupPresentCapabilitiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities),
|
|
readStreamPtrPtr);
|
|
if (pDeviceGroupPresentCapabilities) {
|
|
transform_tohost_VkDeviceGroupPresentCapabilitiesKHR(
|
|
m_state,
|
|
(VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetDeviceGroupPresentCapabilitiesKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pDeviceGroupPresentCapabilities);
|
|
}
|
|
VkResult vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return =
|
|
vk->vkGetDeviceGroupPresentCapabilitiesKHR(unboxed_device,
|
|
pDeviceGroupPresentCapabilities);
|
|
if ((vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pDeviceGroupPresentCapabilities) {
|
|
transform_fromhost_VkDeviceGroupPresentCapabilitiesKHR(
|
|
m_state,
|
|
(VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
|
|
}
|
|
marshal_VkDeviceGroupPresentCapabilitiesKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
|
|
vkStream->write(&vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceGroupPresentCapabilitiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return, device,
|
|
pDeviceGroupPresentCapabilities);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceGroupSurfacePresentModesKHR: {
|
|
android::base::beginTrace("vkGetDeviceGroupSurfacePresentModesKHR decode");
|
|
VkDevice device;
|
|
VkSurfaceKHR surface;
|
|
VkDeviceGroupPresentModeFlagsKHR* pModes;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSurfaceKHR*)&surface =
|
|
(VkSurfaceKHR)unbox_VkSurfaceKHR((VkSurfaceKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pModes;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDeviceGroupPresentModeFlagsKHR**)&pModes, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pModes);
|
|
*readStreamPtrPtr += 8;
|
|
if (pModes) {
|
|
vkReadStream->alloc((void**)&pModes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
|
|
memcpy((VkDeviceGroupPresentModeFlagsKHR*)pModes, *readStreamPtrPtr,
|
|
sizeof(VkDeviceGroupPresentModeFlagsKHR));
|
|
*readStreamPtrPtr += sizeof(VkDeviceGroupPresentModeFlagsKHR);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceGroupSurfacePresentModesKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)surface,
|
|
(unsigned long long)pModes);
|
|
}
|
|
VkResult vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return = (VkResult)0;
|
|
vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return =
|
|
vk->vkGetDeviceGroupSurfacePresentModesKHR(unboxed_device, surface, pModes);
|
|
if ((vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pModes;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pModes) {
|
|
vkStream->write((VkDeviceGroupPresentModeFlagsKHR*)pModes,
|
|
sizeof(VkDeviceGroupPresentModeFlagsKHR));
|
|
}
|
|
vkStream->write(&vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceGroupSurfacePresentModesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return, device, surface,
|
|
pModes);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDevicePresentRectanglesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDevicePresentRectanglesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkSurfaceKHR surface;
|
|
uint32_t* pRectCount;
|
|
VkRect2D* pRects;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSurfaceKHR*)&surface =
|
|
(VkSurfaceKHR)unbox_VkSurfaceKHR((VkSurfaceKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pRectCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pRectCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pRectCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pRectCount) {
|
|
vkReadStream->alloc((void**)&pRectCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pRectCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pRects;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkRect2D**)&pRects, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pRects);
|
|
*readStreamPtrPtr += 8;
|
|
if (pRects) {
|
|
vkReadStream->alloc((void**)&pRects, (*(pRectCount)) * sizeof(VkRect2D));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i) {
|
|
reservedunmarshal_VkRect2D(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRect2D*)(pRects + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pRectCount) {
|
|
if (pRects) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i) {
|
|
transform_tohost_VkRect2D(m_state, (VkRect2D*)(pRects + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDevicePresentRectanglesKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)surface, (unsigned long long)pRectCount,
|
|
(unsigned long long)pRects);
|
|
}
|
|
VkResult vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return =
|
|
vk->vkGetPhysicalDevicePresentRectanglesKHR(unboxed_physicalDevice, surface,
|
|
pRectCount, pRects);
|
|
if ((vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pRectCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pRectCount) {
|
|
vkStream->write((uint32_t*)pRectCount, sizeof(uint32_t));
|
|
}
|
|
if (pRectCount) {
|
|
if (pRects) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i) {
|
|
transform_fromhost_VkRect2D(m_state, (VkRect2D*)(pRects + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pRects;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pRects) {
|
|
if (pRectCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i) {
|
|
marshal_VkRect2D(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRect2D*)(pRects + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDevicePresentRectanglesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return, physicalDevice,
|
|
surface, pRectCount, pRects);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkAcquireNextImage2KHR: {
|
|
android::base::beginTrace("vkAcquireNextImage2KHR decode");
|
|
VkDevice device;
|
|
const VkAcquireNextImageInfoKHR* pAcquireInfo;
|
|
uint32_t* pImageIndex;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pAcquireInfo, sizeof(const VkAcquireNextImageInfoKHR));
|
|
reservedunmarshal_VkAcquireNextImageInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAcquireNextImageInfoKHR*)(pAcquireInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pImageIndex;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pImageIndex, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pImageIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (pAcquireInfo) {
|
|
transform_tohost_VkAcquireNextImageInfoKHR(
|
|
m_state, (VkAcquireNextImageInfoKHR*)(pAcquireInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAcquireNextImage2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pAcquireInfo,
|
|
(unsigned long long)pImageIndex);
|
|
}
|
|
VkResult vkAcquireNextImage2KHR_VkResult_return = (VkResult)0;
|
|
vkAcquireNextImage2KHR_VkResult_return =
|
|
vk->vkAcquireNextImage2KHR(unboxed_device, pAcquireInfo, pImageIndex);
|
|
if ((vkAcquireNextImage2KHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAcquireNextImage2KHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint32_t*)pImageIndex, sizeof(uint32_t));
|
|
vkStream->write(&vkAcquireNextImage2KHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAcquireNextImage2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAcquireNextImage2KHR_VkResult_return, device, pAcquireInfo, pImageIndex);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_display
|
|
case OP_vkGetPhysicalDeviceDisplayPropertiesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceDisplayPropertiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pPropertyCount;
|
|
VkDisplayPropertiesKHR* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDisplayPropertiesKHR**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkDisplayPropertiesKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkDisplayPropertiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPropertiesKHR*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkDisplayPropertiesKHR(
|
|
m_state, (VkDisplayPropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceDisplayPropertiesKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pPropertyCount, (unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceDisplayPropertiesKHR(unboxed_physicalDevice,
|
|
pPropertyCount, pProperties);
|
|
if ((vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkDisplayPropertiesKHR(
|
|
m_state, (VkDisplayPropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkDisplayPropertiesKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceDisplayPropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return, physicalDevice,
|
|
pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceDisplayPlanePropertiesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceDisplayPlanePropertiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pPropertyCount;
|
|
VkDisplayPlanePropertiesKHR* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDisplayPlanePropertiesKHR**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkDisplayPlanePropertiesKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkDisplayPlanePropertiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPlanePropertiesKHR*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkDisplayPlanePropertiesKHR(
|
|
m_state, (VkDisplayPlanePropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceDisplayPlanePropertiesKHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pPropertyCount, (unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceDisplayPlanePropertiesKHR(unboxed_physicalDevice,
|
|
pPropertyCount, pProperties);
|
|
if ((vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkDisplayPlanePropertiesKHR(
|
|
m_state, (VkDisplayPlanePropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkDisplayPlanePropertiesKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPlanePropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return,
|
|
physicalDevice, pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDisplayPlaneSupportedDisplaysKHR: {
|
|
android::base::beginTrace("vkGetDisplayPlaneSupportedDisplaysKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t planeIndex;
|
|
uint32_t* pDisplayCount;
|
|
VkDisplayKHR* pDisplays;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((uint32_t*)&planeIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for pDisplayCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pDisplayCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pDisplayCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pDisplayCount) {
|
|
vkReadStream->alloc((void**)&pDisplayCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pDisplayCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pDisplays;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDisplayKHR**)&pDisplays, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pDisplays);
|
|
*readStreamPtrPtr += 8;
|
|
if (pDisplays) {
|
|
vkReadStream->alloc((void**)&pDisplays,
|
|
(*(pDisplayCount)) * sizeof(VkDisplayKHR));
|
|
if ((*(pDisplayCount))) {
|
|
uint8_t* cgen_var_2_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * (*(pDisplayCount));
|
|
if (pDisplayCount) {
|
|
for (uint32_t k = 0; k < (*(pDisplayCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_2_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkDisplayKHR*)pDisplays) + k) =
|
|
(VkDisplayKHR)(VkDisplayKHR)((VkDisplayKHR)tmpval);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDisplayPlaneSupportedDisplaysKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)planeIndex, (unsigned long long)pDisplayCount,
|
|
(unsigned long long)pDisplays);
|
|
}
|
|
VkResult vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return = (VkResult)0;
|
|
vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return =
|
|
vk->vkGetDisplayPlaneSupportedDisplaysKHR(unboxed_physicalDevice, planeIndex,
|
|
pDisplayCount, pDisplays);
|
|
if ((vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pDisplayCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pDisplayCount) {
|
|
vkStream->write((uint32_t*)pDisplayCount, sizeof(uint32_t));
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pDisplays;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pDisplays) {
|
|
if ((*(pDisplayCount))) {
|
|
uint64_t* cgen_var_4_0;
|
|
vkStream->alloc((void**)&cgen_var_4_0, (*(pDisplayCount)) * 8);
|
|
vkStream->handleMapping()->mapHandles_VkDisplayKHR_u64(
|
|
pDisplays, cgen_var_4_0, (*(pDisplayCount)));
|
|
vkStream->write((uint64_t*)cgen_var_4_0, (*(pDisplayCount)) * 8);
|
|
}
|
|
}
|
|
vkStream->write(&vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDisplayPlaneSupportedDisplaysKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return, physicalDevice,
|
|
planeIndex, pDisplayCount, pDisplays);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDisplayModePropertiesKHR: {
|
|
android::base::beginTrace("vkGetDisplayModePropertiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkDisplayKHR display;
|
|
uint32_t* pPropertyCount;
|
|
VkDisplayModePropertiesKHR* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayKHR*)&display =
|
|
(VkDisplayKHR)unbox_VkDisplayKHR((VkDisplayKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDisplayModePropertiesKHR**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkDisplayModePropertiesKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkDisplayModePropertiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayModePropertiesKHR*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkDisplayModePropertiesKHR(
|
|
m_state, (VkDisplayModePropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDisplayModePropertiesKHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)display, (unsigned long long)pPropertyCount,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetDisplayModePropertiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetDisplayModePropertiesKHR_VkResult_return = vk->vkGetDisplayModePropertiesKHR(
|
|
unboxed_physicalDevice, display, pPropertyCount, pProperties);
|
|
if ((vkGetDisplayModePropertiesKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetDisplayModePropertiesKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkDisplayModePropertiesKHR(
|
|
m_state, (VkDisplayModePropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkDisplayModePropertiesKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayModePropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetDisplayModePropertiesKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDisplayModePropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDisplayModePropertiesKHR_VkResult_return, physicalDevice, display,
|
|
pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateDisplayModeKHR: {
|
|
android::base::beginTrace("vkCreateDisplayModeKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkDisplayKHR display;
|
|
const VkDisplayModeCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDisplayModeKHR* pMode;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayKHR*)&display =
|
|
(VkDisplayKHR)unbox_VkDisplayKHR((VkDisplayKHR)(*&cgen_var_1));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkDisplayModeCreateInfoKHR));
|
|
reservedunmarshal_VkDisplayModeCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayModeCreateInfoKHR*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pMode;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMode, sizeof(VkDisplayModeKHR));
|
|
uint64_t cgen_var_3;
|
|
memcpy((uint64_t*)&cgen_var_3, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDisplayModeKHR*)pMode =
|
|
(VkDisplayModeKHR)(VkDisplayModeKHR)((VkDisplayModeKHR)(*&cgen_var_3));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDisplayModeCreateInfoKHR(
|
|
m_state, (VkDisplayModeCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateDisplayModeKHR 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)display, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pMode);
|
|
}
|
|
VkResult vkCreateDisplayModeKHR_VkResult_return = (VkResult)0;
|
|
vkCreateDisplayModeKHR_VkResult_return = vk->vkCreateDisplayModeKHR(
|
|
unboxed_physicalDevice, display, pCreateInfo, pAllocator, pMode);
|
|
if ((vkCreateDisplayModeKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDisplayModeKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pMode;
|
|
if (vkCreateDisplayModeKHR_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_4;
|
|
static_assert(8 == sizeof(VkDisplayModeKHR),
|
|
"handle map overwrite requires VkDisplayModeKHR to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDisplayModeKHR((VkDisplayModeKHR*)pMode, 1);
|
|
vkStream->write((VkDisplayModeKHR*)pMode, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pMode;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateDisplayModeKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDisplayModeKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDisplayModeKHR_VkResult_return, physicalDevice, display,
|
|
pCreateInfo, pAllocator, pMode);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDisplayPlaneCapabilitiesKHR: {
|
|
android::base::beginTrace("vkGetDisplayPlaneCapabilitiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkDisplayModeKHR mode;
|
|
uint32_t planeIndex;
|
|
VkDisplayPlaneCapabilitiesKHR* pCapabilities;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayModeKHR*)&mode =
|
|
(VkDisplayModeKHR)unbox_VkDisplayModeKHR((VkDisplayModeKHR)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&planeIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for pCapabilities;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCapabilities, sizeof(VkDisplayPlaneCapabilitiesKHR));
|
|
reservedunmarshal_VkDisplayPlaneCapabilitiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPlaneCapabilitiesKHR*)(pCapabilities), readStreamPtrPtr);
|
|
if (pCapabilities) {
|
|
transform_tohost_VkDisplayPlaneCapabilitiesKHR(
|
|
m_state, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDisplayPlaneCapabilitiesKHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice, (unsigned long long)mode,
|
|
(unsigned long long)planeIndex, (unsigned long long)pCapabilities);
|
|
}
|
|
VkResult vkGetDisplayPlaneCapabilitiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetDisplayPlaneCapabilitiesKHR_VkResult_return =
|
|
vk->vkGetDisplayPlaneCapabilitiesKHR(unboxed_physicalDevice, mode, planeIndex,
|
|
pCapabilities);
|
|
if ((vkGetDisplayPlaneCapabilitiesKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetDisplayPlaneCapabilitiesKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pCapabilities) {
|
|
transform_fromhost_VkDisplayPlaneCapabilitiesKHR(
|
|
m_state, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
|
|
}
|
|
marshal_VkDisplayPlaneCapabilitiesKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
|
|
vkStream->write(&vkGetDisplayPlaneCapabilitiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDisplayPlaneCapabilitiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDisplayPlaneCapabilitiesKHR_VkResult_return, physicalDevice, mode,
|
|
planeIndex, pCapabilities);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateDisplayPlaneSurfaceKHR: {
|
|
android::base::beginTrace("vkCreateDisplayPlaneSurfaceKHR decode");
|
|
VkInstance instance;
|
|
const VkDisplaySurfaceCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkDisplaySurfaceCreateInfoKHR));
|
|
reservedunmarshal_VkDisplaySurfaceCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplaySurfaceCreateInfoKHR*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDisplaySurfaceCreateInfoKHR(
|
|
m_state, (VkDisplaySurfaceCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateDisplayPlaneSurfaceKHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateDisplayPlaneSurfaceKHR_VkResult_return = (VkResult)0;
|
|
vkCreateDisplayPlaneSurfaceKHR_VkResult_return = vk->vkCreateDisplayPlaneSurfaceKHR(
|
|
unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateDisplayPlaneSurfaceKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDisplayPlaneSurfaceKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateDisplayPlaneSurfaceKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDisplayPlaneSurfaceKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDisplayPlaneSurfaceKHR_VkResult_return, instance, pCreateInfo,
|
|
pAllocator, pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_display_swapchain
|
|
case OP_vkCreateSharedSwapchainsKHR: {
|
|
android::base::beginTrace("vkCreateSharedSwapchainsKHR decode");
|
|
VkDevice device;
|
|
uint32_t swapchainCount;
|
|
const VkSwapchainCreateInfoKHR* pCreateInfos;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSwapchainKHR* pSwapchains;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)&swapchainCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pCreateInfos,
|
|
((swapchainCount)) * sizeof(const VkSwapchainCreateInfoKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i) {
|
|
reservedunmarshal_VkSwapchainCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSwapchainCreateInfoKHR*)(pCreateInfos + i), readStreamPtrPtr);
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSwapchains;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSwapchains,
|
|
((swapchainCount)) * sizeof(VkSwapchainKHR));
|
|
if (((swapchainCount))) {
|
|
uint8_t* cgen_var_2_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((swapchainCount));
|
|
for (uint32_t k = 0; k < ((swapchainCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_2_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkSwapchainKHR*)pSwapchains) + k) =
|
|
(VkSwapchainKHR)(VkSwapchainKHR)((VkSwapchainKHR)tmpval);
|
|
}
|
|
}
|
|
if (pCreateInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i) {
|
|
transform_tohost_VkSwapchainCreateInfoKHR(
|
|
m_state, (VkSwapchainCreateInfoKHR*)(pCreateInfos + i));
|
|
}
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateSharedSwapchainsKHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)swapchainCount, (unsigned long long)pCreateInfos,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSwapchains);
|
|
}
|
|
VkResult vkCreateSharedSwapchainsKHR_VkResult_return = (VkResult)0;
|
|
vkCreateSharedSwapchainsKHR_VkResult_return = vk->vkCreateSharedSwapchainsKHR(
|
|
unboxed_device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
|
|
if ((vkCreateSharedSwapchainsKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateSharedSwapchainsKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
if (((swapchainCount))) {
|
|
uint64_t* cgen_var_3;
|
|
vkStream->alloc((void**)&cgen_var_3, ((swapchainCount)) * 8);
|
|
vkStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(
|
|
pSwapchains, cgen_var_3, ((swapchainCount)));
|
|
vkStream->write((uint64_t*)cgen_var_3, ((swapchainCount)) * 8);
|
|
}
|
|
vkStream->write(&vkCreateSharedSwapchainsKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateSharedSwapchainsKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateSharedSwapchainsKHR_VkResult_return, device, swapchainCount,
|
|
pCreateInfos, pAllocator, pSwapchains);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_xlib_surface
|
|
case OP_vkCreateXlibSurfaceKHR: {
|
|
android::base::beginTrace("vkCreateXlibSurfaceKHR decode");
|
|
VkInstance instance;
|
|
const VkXlibSurfaceCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkXlibSurfaceCreateInfoKHR));
|
|
reservedunmarshal_VkXlibSurfaceCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkXlibSurfaceCreateInfoKHR*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkXlibSurfaceCreateInfoKHR(
|
|
m_state, (VkXlibSurfaceCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateXlibSurfaceKHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateXlibSurfaceKHR_VkResult_return = (VkResult)0;
|
|
vkCreateXlibSurfaceKHR_VkResult_return =
|
|
vk->vkCreateXlibSurfaceKHR(unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateXlibSurfaceKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateXlibSurfaceKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateXlibSurfaceKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateXlibSurfaceKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateXlibSurfaceKHR_VkResult_return, instance, pCreateInfo, pAllocator,
|
|
pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceXlibPresentationSupportKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceXlibPresentationSupportKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t queueFamilyIndex;
|
|
Display* dpy;
|
|
VisualID visualID;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((uint32_t*)&queueFamilyIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for dpy;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&dpy, sizeof(Display));
|
|
memcpy((Display*)dpy, *readStreamPtrPtr, sizeof(Display));
|
|
*readStreamPtrPtr += sizeof(Display);
|
|
memcpy((VisualID*)&visualID, *readStreamPtrPtr, sizeof(VisualID));
|
|
*readStreamPtrPtr += sizeof(VisualID);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceXlibPresentationSupportKHR 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)queueFamilyIndex, (unsigned long long)dpy,
|
|
(unsigned long long)visualID);
|
|
}
|
|
VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return =
|
|
(VkBool32)0;
|
|
vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return =
|
|
vk->vkGetPhysicalDeviceXlibPresentationSupportKHR(
|
|
unboxed_physicalDevice, queueFamilyIndex, dpy, visualID);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((Display*)dpy, sizeof(Display));
|
|
vkStream->write(&vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return,
|
|
sizeof(VkBool32));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceXlibPresentationSupportKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return,
|
|
physicalDevice, queueFamilyIndex, dpy, visualID);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_xcb_surface
|
|
case OP_vkCreateXcbSurfaceKHR: {
|
|
android::base::beginTrace("vkCreateXcbSurfaceKHR decode");
|
|
// Decoding vkCreateXcbSurfaceKHR is not supported. This should not run.
|
|
fprintf(stderr,
|
|
"stream %p: fatal: decoding unsupported API vkCreateXcbSurfaceKHR\n",
|
|
ioStream);
|
|
__builtin_trap();
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceXcbPresentationSupportKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceXcbPresentationSupportKHR decode");
|
|
// Decoding vkGetPhysicalDeviceXcbPresentationSupportKHR is not supported. This
|
|
// should not run.
|
|
fprintf(stderr,
|
|
"stream %p: fatal: decoding unsupported API "
|
|
"vkGetPhysicalDeviceXcbPresentationSupportKHR\n",
|
|
ioStream);
|
|
__builtin_trap();
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_wayland_surface
|
|
case OP_vkCreateWaylandSurfaceKHR: {
|
|
android::base::beginTrace("vkCreateWaylandSurfaceKHR decode");
|
|
VkInstance instance;
|
|
const VkWaylandSurfaceCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkWaylandSurfaceCreateInfoKHR));
|
|
reservedunmarshal_VkWaylandSurfaceCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkWaylandSurfaceCreateInfoKHR*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkWaylandSurfaceCreateInfoKHR(
|
|
m_state, (VkWaylandSurfaceCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreateWaylandSurfaceKHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateWaylandSurfaceKHR_VkResult_return = (VkResult)0;
|
|
vkCreateWaylandSurfaceKHR_VkResult_return = vk->vkCreateWaylandSurfaceKHR(
|
|
unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateWaylandSurfaceKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateWaylandSurfaceKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateWaylandSurfaceKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateWaylandSurfaceKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateWaylandSurfaceKHR_VkResult_return, instance, pCreateInfo,
|
|
pAllocator, pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceWaylandPresentationSupportKHR: {
|
|
android::base::beginTrace(
|
|
"vkGetPhysicalDeviceWaylandPresentationSupportKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t queueFamilyIndex;
|
|
wl_display* display;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((uint32_t*)&queueFamilyIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for display;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&display, sizeof(wl_display));
|
|
memcpy((wl_display*)display, *readStreamPtrPtr, sizeof(wl_display));
|
|
*readStreamPtrPtr += sizeof(wl_display);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceWaylandPresentationSupportKHR "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)queueFamilyIndex, (unsigned long long)display);
|
|
}
|
|
VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return =
|
|
(VkBool32)0;
|
|
vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return =
|
|
vk->vkGetPhysicalDeviceWaylandPresentationSupportKHR(unboxed_physicalDevice,
|
|
queueFamilyIndex, display);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((wl_display*)display, sizeof(wl_display));
|
|
vkStream->write(&vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return,
|
|
sizeof(VkBool32));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceWaylandPresentationSupportKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return,
|
|
physicalDevice, queueFamilyIndex, display);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_android_surface
|
|
case OP_vkCreateAndroidSurfaceKHR: {
|
|
android::base::beginTrace("vkCreateAndroidSurfaceKHR decode");
|
|
VkInstance instance;
|
|
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkAndroidSurfaceCreateInfoKHR));
|
|
reservedunmarshal_VkAndroidSurfaceCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAndroidSurfaceCreateInfoKHR*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkAndroidSurfaceCreateInfoKHR(
|
|
m_state, (VkAndroidSurfaceCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreateAndroidSurfaceKHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateAndroidSurfaceKHR_VkResult_return = (VkResult)0;
|
|
vkCreateAndroidSurfaceKHR_VkResult_return = vk->vkCreateAndroidSurfaceKHR(
|
|
unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateAndroidSurfaceKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateAndroidSurfaceKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateAndroidSurfaceKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateAndroidSurfaceKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateAndroidSurfaceKHR_VkResult_return, instance, pCreateInfo,
|
|
pAllocator, pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_win32_surface
|
|
case OP_vkCreateWin32SurfaceKHR: {
|
|
android::base::beginTrace("vkCreateWin32SurfaceKHR decode");
|
|
VkInstance instance;
|
|
const VkWin32SurfaceCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkWin32SurfaceCreateInfoKHR));
|
|
reservedunmarshal_VkWin32SurfaceCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkWin32SurfaceCreateInfoKHR*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkWin32SurfaceCreateInfoKHR(
|
|
m_state, (VkWin32SurfaceCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreateWin32SurfaceKHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateWin32SurfaceKHR_VkResult_return = (VkResult)0;
|
|
vkCreateWin32SurfaceKHR_VkResult_return = vk->vkCreateWin32SurfaceKHR(
|
|
unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateWin32SurfaceKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateWin32SurfaceKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateWin32SurfaceKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateWin32SurfaceKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateWin32SurfaceKHR_VkResult_return, instance, pCreateInfo, pAllocator,
|
|
pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceWin32PresentationSupportKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceWin32PresentationSupportKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t queueFamilyIndex;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((uint32_t*)&queueFamilyIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceWin32PresentationSupportKHR 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)queueFamilyIndex);
|
|
}
|
|
VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return =
|
|
(VkBool32)0;
|
|
vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return =
|
|
vk->vkGetPhysicalDeviceWin32PresentationSupportKHR(unboxed_physicalDevice,
|
|
queueFamilyIndex);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return,
|
|
sizeof(VkBool32));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceWin32PresentationSupportKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return,
|
|
physicalDevice, queueFamilyIndex);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_sampler_mirror_clamp_to_edge
|
|
#endif
|
|
#ifdef VK_KHR_video_queue
|
|
case OP_vkGetPhysicalDeviceVideoCapabilitiesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceVideoCapabilitiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkVideoProfileKHR* pVideoProfile;
|
|
VkVideoCapabilitiesKHR* pCapabilities;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pVideoProfile, sizeof(const VkVideoProfileKHR));
|
|
reservedunmarshal_VkVideoProfileKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoProfileKHR*)(pVideoProfile),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pCapabilities;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCapabilities, sizeof(VkVideoCapabilitiesKHR));
|
|
reservedunmarshal_VkVideoCapabilitiesKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoCapabilitiesKHR*)(pCapabilities),
|
|
readStreamPtrPtr);
|
|
if (pVideoProfile) {
|
|
transform_tohost_VkVideoProfileKHR(m_state,
|
|
(VkVideoProfileKHR*)(pVideoProfile));
|
|
}
|
|
if (pCapabilities) {
|
|
transform_tohost_VkVideoCapabilitiesKHR(
|
|
m_state, (VkVideoCapabilitiesKHR*)(pCapabilities));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceVideoCapabilitiesKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pVideoProfile, (unsigned long long)pCapabilities);
|
|
}
|
|
VkResult vkGetPhysicalDeviceVideoCapabilitiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceVideoCapabilitiesKHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceVideoCapabilitiesKHR(unboxed_physicalDevice,
|
|
pVideoProfile, pCapabilities);
|
|
if ((vkGetPhysicalDeviceVideoCapabilitiesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceVideoCapabilitiesKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pCapabilities) {
|
|
transform_fromhost_VkVideoCapabilitiesKHR(
|
|
m_state, (VkVideoCapabilitiesKHR*)(pCapabilities));
|
|
}
|
|
marshal_VkVideoCapabilitiesKHR(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoCapabilitiesKHR*)(pCapabilities));
|
|
vkStream->write(&vkGetPhysicalDeviceVideoCapabilitiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceVideoCapabilitiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceVideoCapabilitiesKHR_VkResult_return, physicalDevice,
|
|
pVideoProfile, pCapabilities);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceVideoFormatPropertiesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceVideoFormatPropertiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo;
|
|
uint32_t* pVideoFormatPropertyCount;
|
|
VkVideoFormatPropertiesKHR* pVideoFormatProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pVideoFormatInfo,
|
|
sizeof(const VkPhysicalDeviceVideoFormatInfoKHR));
|
|
reservedunmarshal_VkPhysicalDeviceVideoFormatInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceVideoFormatInfoKHR*)(pVideoFormatInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pVideoFormatPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pVideoFormatPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pVideoFormatPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pVideoFormatPropertyCount) {
|
|
vkReadStream->alloc((void**)&pVideoFormatPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pVideoFormatPropertyCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pVideoFormatProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkVideoFormatPropertiesKHR**)&pVideoFormatProperties, (*readStreamPtrPtr),
|
|
8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pVideoFormatProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pVideoFormatProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pVideoFormatProperties,
|
|
(*(pVideoFormatPropertyCount)) * sizeof(VkVideoFormatPropertiesKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pVideoFormatPropertyCount)); ++i) {
|
|
reservedunmarshal_VkVideoFormatPropertiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoFormatPropertiesKHR*)(pVideoFormatProperties + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pVideoFormatInfo) {
|
|
transform_tohost_VkPhysicalDeviceVideoFormatInfoKHR(
|
|
m_state, (VkPhysicalDeviceVideoFormatInfoKHR*)(pVideoFormatInfo));
|
|
}
|
|
if (pVideoFormatPropertyCount) {
|
|
if (pVideoFormatProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pVideoFormatPropertyCount)); ++i) {
|
|
transform_tohost_VkVideoFormatPropertiesKHR(
|
|
m_state, (VkVideoFormatPropertiesKHR*)(pVideoFormatProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceVideoFormatPropertiesKHR 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pVideoFormatInfo,
|
|
(unsigned long long)pVideoFormatPropertyCount,
|
|
(unsigned long long)pVideoFormatProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceVideoFormatPropertiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceVideoFormatPropertiesKHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceVideoFormatPropertiesKHR(
|
|
unboxed_physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount,
|
|
pVideoFormatProperties);
|
|
if ((vkGetPhysicalDeviceVideoFormatPropertiesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceVideoFormatPropertiesKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pVideoFormatPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pVideoFormatPropertyCount) {
|
|
vkStream->write((uint32_t*)pVideoFormatPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pVideoFormatPropertyCount) {
|
|
if (pVideoFormatProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pVideoFormatPropertyCount)); ++i) {
|
|
transform_fromhost_VkVideoFormatPropertiesKHR(
|
|
m_state, (VkVideoFormatPropertiesKHR*)(pVideoFormatProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pVideoFormatProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pVideoFormatProperties) {
|
|
if (pVideoFormatPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pVideoFormatPropertyCount)); ++i) {
|
|
marshal_VkVideoFormatPropertiesKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoFormatPropertiesKHR*)(pVideoFormatProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceVideoFormatPropertiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceVideoFormatPropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceVideoFormatPropertiesKHR_VkResult_return, physicalDevice,
|
|
pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateVideoSessionKHR: {
|
|
android::base::beginTrace("vkCreateVideoSessionKHR decode");
|
|
VkDevice device;
|
|
const VkVideoSessionCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkVideoSessionKHR* pVideoSession;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkVideoSessionCreateInfoKHR));
|
|
reservedunmarshal_VkVideoSessionCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoSessionCreateInfoKHR*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pVideoSession;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pVideoSession, sizeof(VkVideoSessionKHR));
|
|
memcpy((VkVideoSessionKHR*)&(*pVideoSession), (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pVideoSession));
|
|
*readStreamPtrPtr += 8;
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkVideoSessionCreateInfoKHR(
|
|
m_state, (VkVideoSessionCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreateVideoSessionKHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pVideoSession);
|
|
}
|
|
VkResult vkCreateVideoSessionKHR_VkResult_return = (VkResult)0;
|
|
vkCreateVideoSessionKHR_VkResult_return = vk->vkCreateVideoSessionKHR(
|
|
unboxed_device, pCreateInfo, pAllocator, pVideoSession);
|
|
if ((vkCreateVideoSessionKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateVideoSessionKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3 = (uint64_t)(*pVideoSession);
|
|
vkStream->putBe64(cgen_var_3);
|
|
vkStream->write(&vkCreateVideoSessionKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateVideoSessionKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateVideoSessionKHR_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pVideoSession);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyVideoSessionKHR: {
|
|
android::base::beginTrace("vkDestroyVideoSessionKHR decode");
|
|
VkDevice device;
|
|
VkVideoSessionKHR videoSession;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkVideoSessionKHR*)&videoSession, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&videoSession);
|
|
*readStreamPtrPtr += 8;
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyVideoSessionKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)videoSession,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyVideoSessionKHR(unboxed_device, videoSession, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyVideoSessionKHR(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
device, videoSession, pAllocator);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetVideoSessionMemoryRequirementsKHR: {
|
|
android::base::beginTrace("vkGetVideoSessionMemoryRequirementsKHR decode");
|
|
VkDevice device;
|
|
VkVideoSessionKHR videoSession;
|
|
uint32_t* pVideoSessionMemoryRequirementsCount;
|
|
VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkVideoSessionKHR*)&videoSession, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&videoSession);
|
|
*readStreamPtrPtr += 8;
|
|
// Begin manual dispatchable handle unboxing for
|
|
// pVideoSessionMemoryRequirementsCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pVideoSessionMemoryRequirementsCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pVideoSessionMemoryRequirementsCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pVideoSessionMemoryRequirementsCount) {
|
|
vkReadStream->alloc((void**)&pVideoSessionMemoryRequirementsCount,
|
|
sizeof(uint32_t));
|
|
memcpy((uint32_t*)pVideoSessionMemoryRequirementsCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pVideoSessionMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkVideoGetMemoryPropertiesKHR**)&pVideoSessionMemoryRequirements,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pVideoSessionMemoryRequirements);
|
|
*readStreamPtrPtr += 8;
|
|
if (pVideoSessionMemoryRequirements) {
|
|
vkReadStream->alloc((void**)&pVideoSessionMemoryRequirements,
|
|
(*(pVideoSessionMemoryRequirementsCount)) *
|
|
sizeof(VkVideoGetMemoryPropertiesKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pVideoSessionMemoryRequirementsCount));
|
|
++i) {
|
|
reservedunmarshal_VkVideoGetMemoryPropertiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoGetMemoryPropertiesKHR*)(pVideoSessionMemoryRequirements + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pVideoSessionMemoryRequirementsCount) {
|
|
if (pVideoSessionMemoryRequirements) {
|
|
for (uint32_t i = 0;
|
|
i < (uint32_t)(*(pVideoSessionMemoryRequirementsCount)); ++i) {
|
|
transform_tohost_VkVideoGetMemoryPropertiesKHR(
|
|
m_state,
|
|
(VkVideoGetMemoryPropertiesKHR*)(pVideoSessionMemoryRequirements +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetVideoSessionMemoryRequirementsKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)videoSession,
|
|
(unsigned long long)pVideoSessionMemoryRequirementsCount,
|
|
(unsigned long long)pVideoSessionMemoryRequirements);
|
|
}
|
|
VkResult vkGetVideoSessionMemoryRequirementsKHR_VkResult_return = (VkResult)0;
|
|
vkGetVideoSessionMemoryRequirementsKHR_VkResult_return =
|
|
vk->vkGetVideoSessionMemoryRequirementsKHR(unboxed_device, videoSession,
|
|
pVideoSessionMemoryRequirementsCount,
|
|
pVideoSessionMemoryRequirements);
|
|
if ((vkGetVideoSessionMemoryRequirementsKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetVideoSessionMemoryRequirementsKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pVideoSessionMemoryRequirementsCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pVideoSessionMemoryRequirementsCount) {
|
|
vkStream->write((uint32_t*)pVideoSessionMemoryRequirementsCount,
|
|
sizeof(uint32_t));
|
|
}
|
|
if (pVideoSessionMemoryRequirementsCount) {
|
|
if (pVideoSessionMemoryRequirements) {
|
|
for (uint32_t i = 0;
|
|
i < (uint32_t)(*(pVideoSessionMemoryRequirementsCount)); ++i) {
|
|
transform_fromhost_VkVideoGetMemoryPropertiesKHR(
|
|
m_state,
|
|
(VkVideoGetMemoryPropertiesKHR*)(pVideoSessionMemoryRequirements +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pVideoSessionMemoryRequirements;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pVideoSessionMemoryRequirements) {
|
|
if (pVideoSessionMemoryRequirementsCount) {
|
|
for (uint32_t i = 0;
|
|
i < (uint32_t)(*(pVideoSessionMemoryRequirementsCount)); ++i) {
|
|
marshal_VkVideoGetMemoryPropertiesKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoGetMemoryPropertiesKHR*)(pVideoSessionMemoryRequirements +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetVideoSessionMemoryRequirementsKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetVideoSessionMemoryRequirementsKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetVideoSessionMemoryRequirementsKHR_VkResult_return, device,
|
|
videoSession, pVideoSessionMemoryRequirementsCount,
|
|
pVideoSessionMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBindVideoSessionMemoryKHR: {
|
|
android::base::beginTrace("vkBindVideoSessionMemoryKHR decode");
|
|
VkDevice device;
|
|
VkVideoSessionKHR videoSession;
|
|
uint32_t videoSessionBindMemoryCount;
|
|
const VkVideoBindMemoryKHR* pVideoSessionBindMemories;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkVideoSessionKHR*)&videoSession, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&videoSession);
|
|
*readStreamPtrPtr += 8;
|
|
memcpy((uint32_t*)&videoSessionBindMemoryCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pVideoSessionBindMemories,
|
|
((videoSessionBindMemoryCount)) * sizeof(const VkVideoBindMemoryKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)((videoSessionBindMemoryCount)); ++i) {
|
|
reservedunmarshal_VkVideoBindMemoryKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoBindMemoryKHR*)(pVideoSessionBindMemories + i), readStreamPtrPtr);
|
|
}
|
|
if (pVideoSessionBindMemories) {
|
|
for (uint32_t i = 0; i < (uint32_t)((videoSessionBindMemoryCount)); ++i) {
|
|
transform_tohost_VkVideoBindMemoryKHR(
|
|
m_state, (VkVideoBindMemoryKHR*)(pVideoSessionBindMemories + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkBindVideoSessionMemoryKHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)videoSession,
|
|
(unsigned long long)videoSessionBindMemoryCount,
|
|
(unsigned long long)pVideoSessionBindMemories);
|
|
}
|
|
VkResult vkBindVideoSessionMemoryKHR_VkResult_return = (VkResult)0;
|
|
vkBindVideoSessionMemoryKHR_VkResult_return = vk->vkBindVideoSessionMemoryKHR(
|
|
unboxed_device, videoSession, videoSessionBindMemoryCount,
|
|
pVideoSessionBindMemories);
|
|
if ((vkBindVideoSessionMemoryKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBindVideoSessionMemoryKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBindVideoSessionMemoryKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBindVideoSessionMemoryKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBindVideoSessionMemoryKHR_VkResult_return, device, videoSession,
|
|
videoSessionBindMemoryCount, pVideoSessionBindMemories);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateVideoSessionParametersKHR: {
|
|
android::base::beginTrace("vkCreateVideoSessionParametersKHR decode");
|
|
VkDevice device;
|
|
const VkVideoSessionParametersCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkVideoSessionParametersKHR* pVideoSessionParameters;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkVideoSessionParametersCreateInfoKHR));
|
|
reservedunmarshal_VkVideoSessionParametersCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoSessionParametersCreateInfoKHR*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pVideoSessionParameters;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pVideoSessionParameters,
|
|
sizeof(VkVideoSessionParametersKHR));
|
|
memcpy((VkVideoSessionParametersKHR*)&(*pVideoSessionParameters),
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pVideoSessionParameters));
|
|
*readStreamPtrPtr += 8;
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkVideoSessionParametersCreateInfoKHR(
|
|
m_state, (VkVideoSessionParametersCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateVideoSessionParametersKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator,
|
|
(unsigned long long)pVideoSessionParameters);
|
|
}
|
|
VkResult vkCreateVideoSessionParametersKHR_VkResult_return = (VkResult)0;
|
|
vkCreateVideoSessionParametersKHR_VkResult_return =
|
|
vk->vkCreateVideoSessionParametersKHR(unboxed_device, pCreateInfo, pAllocator,
|
|
pVideoSessionParameters);
|
|
if ((vkCreateVideoSessionParametersKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateVideoSessionParametersKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3 = (uint64_t)(*pVideoSessionParameters);
|
|
vkStream->putBe64(cgen_var_3);
|
|
vkStream->write(&vkCreateVideoSessionParametersKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateVideoSessionParametersKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateVideoSessionParametersKHR_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pVideoSessionParameters);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkUpdateVideoSessionParametersKHR: {
|
|
android::base::beginTrace("vkUpdateVideoSessionParametersKHR decode");
|
|
VkDevice device;
|
|
VkVideoSessionParametersKHR videoSessionParameters;
|
|
const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkVideoSessionParametersKHR*)&videoSessionParameters, (*readStreamPtrPtr),
|
|
8);
|
|
android::base::Stream::fromBe64((uint8_t*)&videoSessionParameters);
|
|
*readStreamPtrPtr += 8;
|
|
vkReadStream->alloc((void**)&pUpdateInfo,
|
|
sizeof(const VkVideoSessionParametersUpdateInfoKHR));
|
|
reservedunmarshal_VkVideoSessionParametersUpdateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoSessionParametersUpdateInfoKHR*)(pUpdateInfo), readStreamPtrPtr);
|
|
if (pUpdateInfo) {
|
|
transform_tohost_VkVideoSessionParametersUpdateInfoKHR(
|
|
m_state, (VkVideoSessionParametersUpdateInfoKHR*)(pUpdateInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkUpdateVideoSessionParametersKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)videoSessionParameters,
|
|
(unsigned long long)pUpdateInfo);
|
|
}
|
|
VkResult vkUpdateVideoSessionParametersKHR_VkResult_return = (VkResult)0;
|
|
vkUpdateVideoSessionParametersKHR_VkResult_return =
|
|
vk->vkUpdateVideoSessionParametersKHR(unboxed_device, videoSessionParameters,
|
|
pUpdateInfo);
|
|
if ((vkUpdateVideoSessionParametersKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkUpdateVideoSessionParametersKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkUpdateVideoSessionParametersKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkUpdateVideoSessionParametersKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkUpdateVideoSessionParametersKHR_VkResult_return, device,
|
|
videoSessionParameters, pUpdateInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyVideoSessionParametersKHR: {
|
|
android::base::beginTrace("vkDestroyVideoSessionParametersKHR decode");
|
|
VkDevice device;
|
|
VkVideoSessionParametersKHR videoSessionParameters;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkVideoSessionParametersKHR*)&videoSessionParameters, (*readStreamPtrPtr),
|
|
8);
|
|
android::base::Stream::fromBe64((uint8_t*)&videoSessionParameters);
|
|
*readStreamPtrPtr += 8;
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyVideoSessionParametersKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)videoSessionParameters,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyVideoSessionParametersKHR(unboxed_device, videoSessionParameters,
|
|
pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyVideoSessionParametersKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
videoSessionParameters, pAllocator);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBeginVideoCodingKHR: {
|
|
android::base::beginTrace("vkCmdBeginVideoCodingKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkVideoBeginCodingInfoKHR* pBeginInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pBeginInfo, sizeof(const VkVideoBeginCodingInfoKHR));
|
|
reservedunmarshal_VkVideoBeginCodingInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoBeginCodingInfoKHR*)(pBeginInfo), readStreamPtrPtr);
|
|
if (pBeginInfo) {
|
|
transform_tohost_VkVideoBeginCodingInfoKHR(
|
|
m_state, (VkVideoBeginCodingInfoKHR*)(pBeginInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdBeginVideoCodingKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pBeginInfo);
|
|
}
|
|
vk->vkCmdBeginVideoCodingKHR(unboxed_commandBuffer, pBeginInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginVideoCodingKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, pBeginInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndVideoCodingKHR: {
|
|
android::base::beginTrace("vkCmdEndVideoCodingKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkVideoEndCodingInfoKHR* pEndCodingInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pEndCodingInfo, sizeof(const VkVideoEndCodingInfoKHR));
|
|
reservedunmarshal_VkVideoEndCodingInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoEndCodingInfoKHR*)(pEndCodingInfo), readStreamPtrPtr);
|
|
if (pEndCodingInfo) {
|
|
transform_tohost_VkVideoEndCodingInfoKHR(
|
|
m_state, (VkVideoEndCodingInfoKHR*)(pEndCodingInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdEndVideoCodingKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pEndCodingInfo);
|
|
}
|
|
vk->vkCmdEndVideoCodingKHR(unboxed_commandBuffer, pEndCodingInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndVideoCodingKHR(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, pEndCodingInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdControlVideoCodingKHR: {
|
|
android::base::beginTrace("vkCmdControlVideoCodingKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkVideoCodingControlInfoKHR* pCodingControlInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pCodingControlInfo,
|
|
sizeof(const VkVideoCodingControlInfoKHR));
|
|
reservedunmarshal_VkVideoCodingControlInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoCodingControlInfoKHR*)(pCodingControlInfo), readStreamPtrPtr);
|
|
if (pCodingControlInfo) {
|
|
transform_tohost_VkVideoCodingControlInfoKHR(
|
|
m_state, (VkVideoCodingControlInfoKHR*)(pCodingControlInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdControlVideoCodingKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pCodingControlInfo);
|
|
}
|
|
vk->vkCmdControlVideoCodingKHR(unboxed_commandBuffer, pCodingControlInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdControlVideoCodingKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pCodingControlInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_video_decode_queue
|
|
case OP_vkCmdDecodeVideoKHR: {
|
|
android::base::beginTrace("vkCmdDecodeVideoKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkVideoDecodeInfoKHR* pFrameInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pFrameInfo, sizeof(const VkVideoDecodeInfoKHR));
|
|
reservedunmarshal_VkVideoDecodeInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoDecodeInfoKHR*)(pFrameInfo),
|
|
readStreamPtrPtr);
|
|
if (pFrameInfo) {
|
|
transform_tohost_VkVideoDecodeInfoKHR(m_state,
|
|
(VkVideoDecodeInfoKHR*)(pFrameInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdDecodeVideoKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pFrameInfo);
|
|
}
|
|
vk->vkCmdDecodeVideoKHR(unboxed_commandBuffer, pFrameInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDecodeVideoKHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, pFrameInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_dynamic_rendering
|
|
case OP_vkCmdBeginRenderingKHR: {
|
|
android::base::beginTrace("vkCmdBeginRenderingKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkRenderingInfoKHR* pRenderingInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pRenderingInfo, sizeof(const VkRenderingInfoKHR));
|
|
reservedunmarshal_VkRenderingInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRenderingInfoKHR*)(pRenderingInfo),
|
|
readStreamPtrPtr);
|
|
if (pRenderingInfo) {
|
|
transform_tohost_VkRenderingInfoKHR(m_state,
|
|
(VkRenderingInfoKHR*)(pRenderingInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdBeginRenderingKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pRenderingInfo);
|
|
}
|
|
vk->vkCmdBeginRenderingKHR(unboxed_commandBuffer, pRenderingInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginRenderingKHR(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, pRenderingInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndRenderingKHR: {
|
|
android::base::beginTrace("vkCmdEndRenderingKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdEndRenderingKHR 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer);
|
|
}
|
|
vk->vkCmdEndRenderingKHR(unboxed_commandBuffer);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndRenderingKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_multiview
|
|
#endif
|
|
#ifdef VK_KHR_get_physical_device_properties2
|
|
case OP_vkGetPhysicalDeviceFeatures2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceFeatures2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkPhysicalDeviceFeatures2* pFeatures;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pFeatures;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFeatures, sizeof(VkPhysicalDeviceFeatures2));
|
|
reservedunmarshal_VkPhysicalDeviceFeatures2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceFeatures2*)(pFeatures), readStreamPtrPtr);
|
|
if (pFeatures) {
|
|
transform_tohost_VkPhysicalDeviceFeatures2(
|
|
m_state, (VkPhysicalDeviceFeatures2*)(pFeatures));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceFeatures2KHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pFeatures);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceFeatures2KHR(&m_pool, physicalDevice, pFeatures);
|
|
vkStream->unsetHandleMapping();
|
|
if (pFeatures) {
|
|
transform_fromhost_VkPhysicalDeviceFeatures2(
|
|
m_state, (VkPhysicalDeviceFeatures2*)(pFeatures));
|
|
}
|
|
marshal_VkPhysicalDeviceFeatures2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceFeatures2*)(pFeatures));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceFeatures2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice, pFeatures);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceProperties2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceProperties2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkPhysicalDeviceProperties2* pProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pProperties, sizeof(VkPhysicalDeviceProperties2));
|
|
reservedunmarshal_VkPhysicalDeviceProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceProperties2*)(pProperties), readStreamPtrPtr);
|
|
if (pProperties) {
|
|
transform_tohost_VkPhysicalDeviceProperties2(
|
|
m_state, (VkPhysicalDeviceProperties2*)(pProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceProperties2KHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceProperties2KHR(&m_pool, physicalDevice, pProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pProperties) {
|
|
transform_fromhost_VkPhysicalDeviceProperties2(
|
|
m_state, (VkPhysicalDeviceProperties2*)(pProperties));
|
|
}
|
|
marshal_VkPhysicalDeviceProperties2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceProperties2*)(pProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceProperties2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceFormatProperties2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceFormatProperties2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkFormat format;
|
|
VkFormatProperties2* pFormatProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
memcpy((VkFormat*)&format, *readStreamPtrPtr, sizeof(VkFormat));
|
|
*readStreamPtrPtr += sizeof(VkFormat);
|
|
// Begin manual dispatchable handle unboxing for pFormatProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFormatProperties, sizeof(VkFormatProperties2));
|
|
reservedunmarshal_VkFormatProperties2(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFormatProperties2*)(pFormatProperties),
|
|
readStreamPtrPtr);
|
|
if (pFormatProperties) {
|
|
transform_tohost_VkFormatProperties2(m_state,
|
|
(VkFormatProperties2*)(pFormatProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceFormatProperties2KHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)format, (unsigned long long)pFormatProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceFormatProperties2KHR(&m_pool, physicalDevice, format,
|
|
pFormatProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pFormatProperties) {
|
|
transform_fromhost_VkFormatProperties2(
|
|
m_state, (VkFormatProperties2*)(pFormatProperties));
|
|
}
|
|
marshal_VkFormatProperties2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFormatProperties2*)(pFormatProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceFormatProperties2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice, format,
|
|
pFormatProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceImageFormatProperties2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceImageFormatProperties2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo;
|
|
VkImageFormatProperties2* pImageFormatProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pImageFormatInfo,
|
|
sizeof(const VkPhysicalDeviceImageFormatInfo2));
|
|
reservedunmarshal_VkPhysicalDeviceImageFormatInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceImageFormatInfo2*)(pImageFormatInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pImageFormatProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pImageFormatProperties,
|
|
sizeof(VkImageFormatProperties2));
|
|
reservedunmarshal_VkImageFormatProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageFormatProperties2*)(pImageFormatProperties), readStreamPtrPtr);
|
|
if (pImageFormatInfo) {
|
|
transform_tohost_VkPhysicalDeviceImageFormatInfo2(
|
|
m_state, (VkPhysicalDeviceImageFormatInfo2*)(pImageFormatInfo));
|
|
}
|
|
if (pImageFormatProperties) {
|
|
transform_tohost_VkImageFormatProperties2(
|
|
m_state, (VkImageFormatProperties2*)(pImageFormatProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceImageFormatProperties2KHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pImageFormatInfo,
|
|
(unsigned long long)pImageFormatProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return =
|
|
m_state->on_vkGetPhysicalDeviceImageFormatProperties2KHR(
|
|
&m_pool, physicalDevice, pImageFormatInfo, pImageFormatProperties);
|
|
if ((vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pImageFormatProperties) {
|
|
transform_fromhost_VkImageFormatProperties2(
|
|
m_state, (VkImageFormatProperties2*)(pImageFormatProperties));
|
|
}
|
|
marshal_VkImageFormatProperties2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageFormatProperties2*)(pImageFormatProperties));
|
|
vkStream->write(&vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceImageFormatProperties2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return,
|
|
physicalDevice, pImageFormatInfo, pImageFormatProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceQueueFamilyProperties2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceQueueFamilyProperties2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pQueueFamilyPropertyCount;
|
|
VkQueueFamilyProperties2* pQueueFamilyProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pQueueFamilyPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pQueueFamilyPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pQueueFamilyPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pQueueFamilyPropertyCount) {
|
|
vkReadStream->alloc((void**)&pQueueFamilyPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pQueueFamilyPropertyCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pQueueFamilyProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkQueueFamilyProperties2**)&pQueueFamilyProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pQueueFamilyProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pQueueFamilyProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pQueueFamilyProperties,
|
|
(*(pQueueFamilyPropertyCount)) * sizeof(VkQueueFamilyProperties2));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
reservedunmarshal_VkQueueFamilyProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkQueueFamilyProperties2*)(pQueueFamilyProperties + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pQueueFamilyPropertyCount) {
|
|
if (pQueueFamilyProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
transform_tohost_VkQueueFamilyProperties2(
|
|
m_state, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceQueueFamilyProperties2KHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pQueueFamilyPropertyCount,
|
|
(unsigned long long)pQueueFamilyProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceQueueFamilyProperties2KHR(
|
|
unboxed_physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pQueueFamilyPropertyCount) {
|
|
vkStream->write((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pQueueFamilyPropertyCount) {
|
|
if (pQueueFamilyProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
transform_fromhost_VkQueueFamilyProperties2(
|
|
m_state, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pQueueFamilyProperties) {
|
|
if (pQueueFamilyPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
|
|
marshal_VkQueueFamilyProperties2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceQueueFamilyProperties2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pQueueFamilyPropertyCount, pQueueFamilyProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceMemoryProperties2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceMemoryProperties2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkPhysicalDeviceMemoryProperties2* pMemoryProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pMemoryProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryProperties,
|
|
sizeof(VkPhysicalDeviceMemoryProperties2));
|
|
reservedunmarshal_VkPhysicalDeviceMemoryProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), readStreamPtrPtr);
|
|
if (pMemoryProperties) {
|
|
transform_tohost_VkPhysicalDeviceMemoryProperties2(
|
|
m_state, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetPhysicalDeviceMemoryProperties2KHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pMemoryProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceMemoryProperties2KHR(&m_pool, physicalDevice,
|
|
pMemoryProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryProperties) {
|
|
transform_fromhost_VkPhysicalDeviceMemoryProperties2(
|
|
m_state, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
|
|
}
|
|
marshal_VkPhysicalDeviceMemoryProperties2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceMemoryProperties2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pMemoryProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceSparseImageFormatProperties2KHR: {
|
|
android::base::beginTrace(
|
|
"vkGetPhysicalDeviceSparseImageFormatProperties2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo;
|
|
uint32_t* pPropertyCount;
|
|
VkSparseImageFormatProperties2* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pFormatInfo,
|
|
sizeof(const VkPhysicalDeviceSparseImageFormatInfo2));
|
|
reservedunmarshal_VkPhysicalDeviceSparseImageFormatInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceSparseImageFormatInfo2*)(pFormatInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSparseImageFormatProperties2**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkSparseImageFormatProperties2));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkSparseImageFormatProperties2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageFormatProperties2*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pFormatInfo) {
|
|
transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(
|
|
m_state, (VkPhysicalDeviceSparseImageFormatInfo2*)(pFormatInfo));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkSparseImageFormatProperties2(
|
|
m_state, (VkSparseImageFormatProperties2*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSparseImageFormatProperties2KHR "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pFormatInfo, (unsigned long long)pPropertyCount,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
|
|
unboxed_physicalDevice, pFormatInfo, pPropertyCount, pProperties);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkSparseImageFormatProperties2(
|
|
m_state, (VkSparseImageFormatProperties2*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkSparseImageFormatProperties2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageFormatProperties2*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pFormatInfo, pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_device_group
|
|
case OP_vkGetDeviceGroupPeerMemoryFeaturesKHR: {
|
|
android::base::beginTrace("vkGetDeviceGroupPeerMemoryFeaturesKHR decode");
|
|
VkDevice device;
|
|
uint32_t heapIndex;
|
|
uint32_t localDeviceIndex;
|
|
uint32_t remoteDeviceIndex;
|
|
VkPeerMemoryFeatureFlags* pPeerMemoryFeatures;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)&heapIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&localDeviceIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&remoteDeviceIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for pPeerMemoryFeatures;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
|
|
memcpy((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, *readStreamPtrPtr,
|
|
sizeof(VkPeerMemoryFeatureFlags));
|
|
*readStreamPtrPtr += sizeof(VkPeerMemoryFeatureFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceGroupPeerMemoryFeaturesKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)heapIndex,
|
|
(unsigned long long)localDeviceIndex,
|
|
(unsigned long long)remoteDeviceIndex,
|
|
(unsigned long long)pPeerMemoryFeatures);
|
|
}
|
|
vk->vkGetDeviceGroupPeerMemoryFeaturesKHR(unboxed_device, heapIndex,
|
|
localDeviceIndex, remoteDeviceIndex,
|
|
pPeerMemoryFeatures);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures,
|
|
sizeof(VkPeerMemoryFeatureFlags));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceGroupPeerMemoryFeaturesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, heapIndex,
|
|
localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetDeviceMaskKHR: {
|
|
android::base::beginTrace("vkCmdSetDeviceMaskKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t deviceMask;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&deviceMask, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetDeviceMaskKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)deviceMask);
|
|
}
|
|
vk->vkCmdSetDeviceMaskKHR(unboxed_commandBuffer, deviceMask);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDeviceMaskKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, deviceMask);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDispatchBaseKHR: {
|
|
android::base::beginTrace("vkCmdDispatchBaseKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t baseGroupX;
|
|
uint32_t baseGroupY;
|
|
uint32_t baseGroupZ;
|
|
uint32_t groupCountX;
|
|
uint32_t groupCountY;
|
|
uint32_t groupCountZ;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&baseGroupX, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&baseGroupY, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&baseGroupZ, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCountX, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCountY, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCountZ, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDispatchBaseKHR 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)baseGroupX, (unsigned long long)baseGroupY,
|
|
(unsigned long long)baseGroupZ, (unsigned long long)groupCountX,
|
|
(unsigned long long)groupCountY, (unsigned long long)groupCountZ);
|
|
}
|
|
vk->vkCmdDispatchBaseKHR(unboxed_commandBuffer, baseGroupX, baseGroupY, baseGroupZ,
|
|
groupCountX, groupCountY, groupCountZ);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDispatchBaseKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, baseGroupX,
|
|
baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_shader_draw_parameters
|
|
#endif
|
|
#ifdef VK_KHR_maintenance1
|
|
case OP_vkTrimCommandPoolKHR: {
|
|
android::base::beginTrace("vkTrimCommandPoolKHR decode");
|
|
VkDevice device;
|
|
VkCommandPool commandPool;
|
|
VkCommandPoolTrimFlags flags;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandPool*)&commandPool =
|
|
(VkCommandPool)unbox_VkCommandPool((VkCommandPool)(*&cgen_var_1));
|
|
memcpy((VkCommandPoolTrimFlags*)&flags, *readStreamPtrPtr,
|
|
sizeof(VkCommandPoolTrimFlags));
|
|
*readStreamPtrPtr += sizeof(VkCommandPoolTrimFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkTrimCommandPoolKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)commandPool,
|
|
(unsigned long long)flags);
|
|
}
|
|
vk->vkTrimCommandPoolKHR(unboxed_device, commandPool, flags);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkTrimCommandPoolKHR(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool, device,
|
|
commandPool, flags);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_device_group_creation
|
|
case OP_vkEnumeratePhysicalDeviceGroupsKHR: {
|
|
android::base::beginTrace("vkEnumeratePhysicalDeviceGroupsKHR decode");
|
|
VkInstance instance;
|
|
uint32_t* pPhysicalDeviceGroupCount;
|
|
VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
// Begin manual dispatchable handle unboxing for pPhysicalDeviceGroupCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPhysicalDeviceGroupCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPhysicalDeviceGroupCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPhysicalDeviceGroupCount) {
|
|
vkReadStream->alloc((void**)&pPhysicalDeviceGroupCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPhysicalDeviceGroupCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPhysicalDeviceGroupProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPhysicalDeviceGroupProperties**)&pPhysicalDeviceGroupProperties,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPhysicalDeviceGroupProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPhysicalDeviceGroupProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pPhysicalDeviceGroupProperties,
|
|
(*(pPhysicalDeviceGroupCount)) * sizeof(VkPhysicalDeviceGroupProperties));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
|
|
reservedunmarshal_VkPhysicalDeviceGroupProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPhysicalDeviceGroupCount) {
|
|
if (pPhysicalDeviceGroupProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
|
|
transform_tohost_VkPhysicalDeviceGroupProperties(
|
|
m_state,
|
|
(VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkEnumeratePhysicalDeviceGroupsKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)instance,
|
|
(unsigned long long)pPhysicalDeviceGroupCount,
|
|
(unsigned long long)pPhysicalDeviceGroupProperties);
|
|
}
|
|
VkResult vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return = (VkResult)0;
|
|
vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return =
|
|
vk->vkEnumeratePhysicalDeviceGroupsKHR(unboxed_instance,
|
|
pPhysicalDeviceGroupCount,
|
|
pPhysicalDeviceGroupProperties);
|
|
if ((vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPhysicalDeviceGroupCount) {
|
|
vkStream->write((uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
|
|
}
|
|
if (pPhysicalDeviceGroupCount) {
|
|
if (pPhysicalDeviceGroupProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
|
|
transform_fromhost_VkPhysicalDeviceGroupProperties(
|
|
m_state,
|
|
(VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pPhysicalDeviceGroupProperties) {
|
|
if (pPhysicalDeviceGroupCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
|
|
marshal_VkPhysicalDeviceGroupProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEnumeratePhysicalDeviceGroupsKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return, instance,
|
|
pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_external_memory_capabilities
|
|
case OP_vkGetPhysicalDeviceExternalBufferPropertiesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceExternalBufferPropertiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo;
|
|
VkExternalBufferProperties* pExternalBufferProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pExternalBufferInfo,
|
|
sizeof(const VkPhysicalDeviceExternalBufferInfo));
|
|
reservedunmarshal_VkPhysicalDeviceExternalBufferInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceExternalBufferInfo*)(pExternalBufferInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pExternalBufferProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pExternalBufferProperties,
|
|
sizeof(VkExternalBufferProperties));
|
|
reservedunmarshal_VkExternalBufferProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalBufferProperties*)(pExternalBufferProperties), readStreamPtrPtr);
|
|
if (pExternalBufferInfo) {
|
|
m_state->transformImpl_VkPhysicalDeviceExternalBufferInfo_tohost(
|
|
pExternalBufferInfo, 1);
|
|
transform_tohost_VkPhysicalDeviceExternalBufferInfo(
|
|
m_state, (VkPhysicalDeviceExternalBufferInfo*)(pExternalBufferInfo));
|
|
}
|
|
if (pExternalBufferProperties) {
|
|
m_state->transformImpl_VkExternalBufferProperties_tohost(
|
|
pExternalBufferProperties, 1);
|
|
transform_tohost_VkExternalBufferProperties(
|
|
m_state, (VkExternalBufferProperties*)(pExternalBufferProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceExternalBufferPropertiesKHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pExternalBufferInfo,
|
|
(unsigned long long)pExternalBufferProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceExternalBufferPropertiesKHR(
|
|
unboxed_physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pExternalBufferProperties) {
|
|
m_state->transformImpl_VkExternalBufferProperties_fromhost(
|
|
pExternalBufferProperties, 1);
|
|
transform_fromhost_VkExternalBufferProperties(
|
|
m_state, (VkExternalBufferProperties*)(pExternalBufferProperties));
|
|
}
|
|
marshal_VkExternalBufferProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalBufferProperties*)(pExternalBufferProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceExternalBufferPropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pExternalBufferInfo, pExternalBufferProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_external_memory
|
|
#endif
|
|
#ifdef VK_KHR_external_memory_win32
|
|
case OP_vkGetMemoryWin32HandleKHR: {
|
|
android::base::beginTrace("vkGetMemoryWin32HandleKHR decode");
|
|
VkDevice device;
|
|
const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo;
|
|
HANDLE* pHandle;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pGetWin32HandleInfo,
|
|
sizeof(const VkMemoryGetWin32HandleInfoKHR));
|
|
reservedunmarshal_VkMemoryGetWin32HandleInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryGetWin32HandleInfoKHR*)(pGetWin32HandleInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pHandle;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pHandle, sizeof(HANDLE));
|
|
memcpy((HANDLE*)pHandle, *readStreamPtrPtr, sizeof(HANDLE));
|
|
*readStreamPtrPtr += sizeof(HANDLE);
|
|
if (pGetWin32HandleInfo) {
|
|
transform_tohost_VkMemoryGetWin32HandleInfoKHR(
|
|
m_state, (VkMemoryGetWin32HandleInfoKHR*)(pGetWin32HandleInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetMemoryWin32HandleKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pGetWin32HandleInfo, (unsigned long long)pHandle);
|
|
}
|
|
VkResult vkGetMemoryWin32HandleKHR_VkResult_return = (VkResult)0;
|
|
vkGetMemoryWin32HandleKHR_VkResult_return =
|
|
vk->vkGetMemoryWin32HandleKHR(unboxed_device, pGetWin32HandleInfo, pHandle);
|
|
if ((vkGetMemoryWin32HandleKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetMemoryWin32HandleKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((HANDLE*)pHandle, sizeof(HANDLE));
|
|
vkStream->write(&vkGetMemoryWin32HandleKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryWin32HandleKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryWin32HandleKHR_VkResult_return, device, pGetWin32HandleInfo,
|
|
pHandle);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetMemoryWin32HandlePropertiesKHR: {
|
|
android::base::beginTrace("vkGetMemoryWin32HandlePropertiesKHR decode");
|
|
VkDevice device;
|
|
VkExternalMemoryHandleTypeFlagBits handleType;
|
|
HANDLE handle;
|
|
VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkExternalMemoryHandleTypeFlagBits*)&handleType, *readStreamPtrPtr,
|
|
sizeof(VkExternalMemoryHandleTypeFlagBits));
|
|
*readStreamPtrPtr += sizeof(VkExternalMemoryHandleTypeFlagBits);
|
|
memcpy((HANDLE*)&handle, *readStreamPtrPtr, sizeof(HANDLE));
|
|
*readStreamPtrPtr += sizeof(HANDLE);
|
|
// Begin manual dispatchable handle unboxing for pMemoryWin32HandleProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryWin32HandleProperties,
|
|
sizeof(VkMemoryWin32HandlePropertiesKHR));
|
|
reservedunmarshal_VkMemoryWin32HandlePropertiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties),
|
|
readStreamPtrPtr);
|
|
if (pMemoryWin32HandleProperties) {
|
|
transform_tohost_VkMemoryWin32HandlePropertiesKHR(
|
|
m_state, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetMemoryWin32HandlePropertiesKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)handleType,
|
|
(unsigned long long)handle,
|
|
(unsigned long long)pMemoryWin32HandleProperties);
|
|
}
|
|
VkResult vkGetMemoryWin32HandlePropertiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetMemoryWin32HandlePropertiesKHR_VkResult_return =
|
|
vk->vkGetMemoryWin32HandlePropertiesKHR(unboxed_device, handleType, handle,
|
|
pMemoryWin32HandleProperties);
|
|
if ((vkGetMemoryWin32HandlePropertiesKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetMemoryWin32HandlePropertiesKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryWin32HandleProperties) {
|
|
transform_fromhost_VkMemoryWin32HandlePropertiesKHR(
|
|
m_state, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
|
|
}
|
|
marshal_VkMemoryWin32HandlePropertiesKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
|
|
vkStream->write(&vkGetMemoryWin32HandlePropertiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryWin32HandlePropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryWin32HandlePropertiesKHR_VkResult_return, device, handleType,
|
|
handle, pMemoryWin32HandleProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_external_memory_fd
|
|
case OP_vkGetMemoryFdKHR: {
|
|
android::base::beginTrace("vkGetMemoryFdKHR decode");
|
|
VkDevice device;
|
|
const VkMemoryGetFdInfoKHR* pGetFdInfo;
|
|
int* pFd;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pGetFdInfo, sizeof(const VkMemoryGetFdInfoKHR));
|
|
reservedunmarshal_VkMemoryGetFdInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryGetFdInfoKHR*)(pGetFdInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pFd;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFd, sizeof(int));
|
|
memcpy((int*)pFd, *readStreamPtrPtr, sizeof(int));
|
|
*readStreamPtrPtr += sizeof(int);
|
|
if (pGetFdInfo) {
|
|
transform_tohost_VkMemoryGetFdInfoKHR(m_state,
|
|
(VkMemoryGetFdInfoKHR*)(pGetFdInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetMemoryFdKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pGetFdInfo,
|
|
(unsigned long long)pFd);
|
|
}
|
|
VkResult vkGetMemoryFdKHR_VkResult_return = (VkResult)0;
|
|
vkGetMemoryFdKHR_VkResult_return =
|
|
vk->vkGetMemoryFdKHR(unboxed_device, pGetFdInfo, pFd);
|
|
if ((vkGetMemoryFdKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetMemoryFdKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((int*)pFd, sizeof(int));
|
|
vkStream->write(&vkGetMemoryFdKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryFdKHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkGetMemoryFdKHR_VkResult_return,
|
|
device, pGetFdInfo, pFd);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetMemoryFdPropertiesKHR: {
|
|
android::base::beginTrace("vkGetMemoryFdPropertiesKHR decode");
|
|
VkDevice device;
|
|
VkExternalMemoryHandleTypeFlagBits handleType;
|
|
int fd;
|
|
VkMemoryFdPropertiesKHR* pMemoryFdProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkExternalMemoryHandleTypeFlagBits*)&handleType, *readStreamPtrPtr,
|
|
sizeof(VkExternalMemoryHandleTypeFlagBits));
|
|
*readStreamPtrPtr += sizeof(VkExternalMemoryHandleTypeFlagBits);
|
|
memcpy((int*)&fd, *readStreamPtrPtr, sizeof(int));
|
|
*readStreamPtrPtr += sizeof(int);
|
|
// Begin manual dispatchable handle unboxing for pMemoryFdProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryFdProperties, sizeof(VkMemoryFdPropertiesKHR));
|
|
reservedunmarshal_VkMemoryFdPropertiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryFdPropertiesKHR*)(pMemoryFdProperties), readStreamPtrPtr);
|
|
if (pMemoryFdProperties) {
|
|
transform_tohost_VkMemoryFdPropertiesKHR(
|
|
m_state, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetMemoryFdPropertiesKHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)handleType,
|
|
(unsigned long long)fd, (unsigned long long)pMemoryFdProperties);
|
|
}
|
|
VkResult vkGetMemoryFdPropertiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetMemoryFdPropertiesKHR_VkResult_return = vk->vkGetMemoryFdPropertiesKHR(
|
|
unboxed_device, handleType, fd, pMemoryFdProperties);
|
|
if ((vkGetMemoryFdPropertiesKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetMemoryFdPropertiesKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryFdProperties) {
|
|
transform_fromhost_VkMemoryFdPropertiesKHR(
|
|
m_state, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
|
|
}
|
|
marshal_VkMemoryFdPropertiesKHR(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
|
|
vkStream->write(&vkGetMemoryFdPropertiesKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryFdPropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryFdPropertiesKHR_VkResult_return, device, handleType, fd,
|
|
pMemoryFdProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_win32_keyed_mutex
|
|
#endif
|
|
#ifdef VK_KHR_external_semaphore_capabilities
|
|
case OP_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR: {
|
|
android::base::beginTrace(
|
|
"vkGetPhysicalDeviceExternalSemaphorePropertiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo;
|
|
VkExternalSemaphoreProperties* pExternalSemaphoreProperties;
|
|
// Begin global wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pExternalSemaphoreInfo,
|
|
sizeof(const VkPhysicalDeviceExternalSemaphoreInfo));
|
|
reservedunmarshal_VkPhysicalDeviceExternalSemaphoreInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceExternalSemaphoreInfo*)(pExternalSemaphoreInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pExternalSemaphoreProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pExternalSemaphoreProperties,
|
|
sizeof(VkExternalSemaphoreProperties));
|
|
reservedunmarshal_VkExternalSemaphoreProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties),
|
|
readStreamPtrPtr);
|
|
if (pExternalSemaphoreInfo) {
|
|
transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(
|
|
m_state, (VkPhysicalDeviceExternalSemaphoreInfo*)(pExternalSemaphoreInfo));
|
|
}
|
|
if (pExternalSemaphoreProperties) {
|
|
transform_tohost_VkExternalSemaphoreProperties(
|
|
m_state, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceExternalSemaphorePropertiesKHR "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pExternalSemaphoreInfo,
|
|
(unsigned long long)pExternalSemaphoreProperties);
|
|
}
|
|
m_state->on_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
|
|
&m_pool, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pExternalSemaphoreProperties) {
|
|
transform_fromhost_VkExternalSemaphoreProperties(
|
|
m_state, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
|
|
}
|
|
marshal_VkExternalSemaphoreProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pExternalSemaphoreInfo, pExternalSemaphoreProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_external_semaphore
|
|
#endif
|
|
#ifdef VK_KHR_external_semaphore_win32
|
|
case OP_vkImportSemaphoreWin32HandleKHR: {
|
|
android::base::beginTrace("vkImportSemaphoreWin32HandleKHR decode");
|
|
VkDevice device;
|
|
const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pImportSemaphoreWin32HandleInfo,
|
|
sizeof(const VkImportSemaphoreWin32HandleInfoKHR));
|
|
reservedunmarshal_VkImportSemaphoreWin32HandleInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImportSemaphoreWin32HandleInfoKHR*)(pImportSemaphoreWin32HandleInfo),
|
|
readStreamPtrPtr);
|
|
if (pImportSemaphoreWin32HandleInfo) {
|
|
transform_tohost_VkImportSemaphoreWin32HandleInfoKHR(
|
|
m_state,
|
|
(VkImportSemaphoreWin32HandleInfoKHR*)(pImportSemaphoreWin32HandleInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkImportSemaphoreWin32HandleKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pImportSemaphoreWin32HandleInfo);
|
|
}
|
|
VkResult vkImportSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
|
|
vkImportSemaphoreWin32HandleKHR_VkResult_return =
|
|
vk->vkImportSemaphoreWin32HandleKHR(unboxed_device,
|
|
pImportSemaphoreWin32HandleInfo);
|
|
if ((vkImportSemaphoreWin32HandleKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkImportSemaphoreWin32HandleKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkImportSemaphoreWin32HandleKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkImportSemaphoreWin32HandleKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkImportSemaphoreWin32HandleKHR_VkResult_return, device,
|
|
pImportSemaphoreWin32HandleInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetSemaphoreWin32HandleKHR: {
|
|
android::base::beginTrace("vkGetSemaphoreWin32HandleKHR decode");
|
|
VkDevice device;
|
|
const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo;
|
|
HANDLE* pHandle;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pGetWin32HandleInfo,
|
|
sizeof(const VkSemaphoreGetWin32HandleInfoKHR));
|
|
reservedunmarshal_VkSemaphoreGetWin32HandleInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSemaphoreGetWin32HandleInfoKHR*)(pGetWin32HandleInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pHandle;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pHandle, sizeof(HANDLE));
|
|
memcpy((HANDLE*)pHandle, *readStreamPtrPtr, sizeof(HANDLE));
|
|
*readStreamPtrPtr += sizeof(HANDLE);
|
|
if (pGetWin32HandleInfo) {
|
|
transform_tohost_VkSemaphoreGetWin32HandleInfoKHR(
|
|
m_state, (VkSemaphoreGetWin32HandleInfoKHR*)(pGetWin32HandleInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetSemaphoreWin32HandleKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pGetWin32HandleInfo, (unsigned long long)pHandle);
|
|
}
|
|
VkResult vkGetSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
|
|
vkGetSemaphoreWin32HandleKHR_VkResult_return =
|
|
vk->vkGetSemaphoreWin32HandleKHR(unboxed_device, pGetWin32HandleInfo, pHandle);
|
|
if ((vkGetSemaphoreWin32HandleKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetSemaphoreWin32HandleKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((HANDLE*)pHandle, sizeof(HANDLE));
|
|
vkStream->write(&vkGetSemaphoreWin32HandleKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetSemaphoreWin32HandleKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetSemaphoreWin32HandleKHR_VkResult_return, device, pGetWin32HandleInfo,
|
|
pHandle);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_external_semaphore_fd
|
|
case OP_vkImportSemaphoreFdKHR: {
|
|
android::base::beginTrace("vkImportSemaphoreFdKHR decode");
|
|
VkDevice device;
|
|
const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pImportSemaphoreFdInfo,
|
|
sizeof(const VkImportSemaphoreFdInfoKHR));
|
|
reservedunmarshal_VkImportSemaphoreFdInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImportSemaphoreFdInfoKHR*)(pImportSemaphoreFdInfo), readStreamPtrPtr);
|
|
if (pImportSemaphoreFdInfo) {
|
|
transform_tohost_VkImportSemaphoreFdInfoKHR(
|
|
m_state, (VkImportSemaphoreFdInfoKHR*)(pImportSemaphoreFdInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkImportSemaphoreFdKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pImportSemaphoreFdInfo);
|
|
}
|
|
VkResult vkImportSemaphoreFdKHR_VkResult_return = (VkResult)0;
|
|
vkImportSemaphoreFdKHR_VkResult_return =
|
|
m_state->on_vkImportSemaphoreFdKHR(&m_pool, device, pImportSemaphoreFdInfo);
|
|
if ((vkImportSemaphoreFdKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkImportSemaphoreFdKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkImportSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkImportSemaphoreFdKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkImportSemaphoreFdKHR_VkResult_return, device, pImportSemaphoreFdInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetSemaphoreFdKHR: {
|
|
android::base::beginTrace("vkGetSemaphoreFdKHR decode");
|
|
VkDevice device;
|
|
const VkSemaphoreGetFdInfoKHR* pGetFdInfo;
|
|
int* pFd;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pGetFdInfo, sizeof(const VkSemaphoreGetFdInfoKHR));
|
|
reservedunmarshal_VkSemaphoreGetFdInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSemaphoreGetFdInfoKHR*)(pGetFdInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pFd;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFd, sizeof(int));
|
|
memcpy((int*)pFd, *readStreamPtrPtr, sizeof(int));
|
|
*readStreamPtrPtr += sizeof(int);
|
|
if (pGetFdInfo) {
|
|
transform_tohost_VkSemaphoreGetFdInfoKHR(
|
|
m_state, (VkSemaphoreGetFdInfoKHR*)(pGetFdInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetSemaphoreFdKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pGetFdInfo,
|
|
(unsigned long long)pFd);
|
|
}
|
|
VkResult vkGetSemaphoreFdKHR_VkResult_return = (VkResult)0;
|
|
vkGetSemaphoreFdKHR_VkResult_return =
|
|
m_state->on_vkGetSemaphoreFdKHR(&m_pool, device, pGetFdInfo, pFd);
|
|
if ((vkGetSemaphoreFdKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetSemaphoreFdKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((int*)pFd, sizeof(int));
|
|
vkStream->write(&vkGetSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetSemaphoreFdKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetSemaphoreFdKHR_VkResult_return, device, pGetFdInfo, pFd);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_push_descriptor
|
|
case OP_vkCmdPushDescriptorSetKHR: {
|
|
android::base::beginTrace("vkCmdPushDescriptorSetKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineBindPoint pipelineBindPoint;
|
|
VkPipelineLayout layout;
|
|
uint32_t set;
|
|
uint32_t descriptorWriteCount;
|
|
const VkWriteDescriptorSet* pDescriptorWrites;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkPipelineBindPoint*)&pipelineBindPoint, *readStreamPtrPtr,
|
|
sizeof(VkPipelineBindPoint));
|
|
*readStreamPtrPtr += sizeof(VkPipelineBindPoint);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineLayout*)&layout =
|
|
(VkPipelineLayout)unbox_VkPipelineLayout((VkPipelineLayout)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&set, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&descriptorWriteCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pDescriptorWrites,
|
|
((descriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
|
|
for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
|
|
reservedunmarshal_VkWriteDescriptorSet(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkWriteDescriptorSet*)(pDescriptorWrites + i), readStreamPtrPtr);
|
|
}
|
|
if (pDescriptorWrites) {
|
|
for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
|
|
transform_tohost_VkWriteDescriptorSet(
|
|
m_state, (VkWriteDescriptorSet*)(pDescriptorWrites + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdPushDescriptorSetKHR 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pipelineBindPoint, (unsigned long long)layout,
|
|
(unsigned long long)set, (unsigned long long)descriptorWriteCount,
|
|
(unsigned long long)pDescriptorWrites);
|
|
}
|
|
vk->vkCmdPushDescriptorSetKHR(unboxed_commandBuffer, pipelineBindPoint, layout, set,
|
|
descriptorWriteCount, pDescriptorWrites);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdPushDescriptorSetKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdPushDescriptorSetWithTemplateKHR: {
|
|
android::base::beginTrace("vkCmdPushDescriptorSetWithTemplateKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkDescriptorUpdateTemplate descriptorUpdateTemplate;
|
|
VkPipelineLayout layout;
|
|
uint32_t set;
|
|
const void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate =
|
|
(VkDescriptorUpdateTemplate)unbox_VkDescriptorUpdateTemplate(
|
|
(VkDescriptorUpdateTemplate)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineLayout*)&layout =
|
|
(VkPipelineLayout)unbox_VkPipelineLayout((VkPipelineLayout)(*&cgen_var_2));
|
|
memcpy((uint32_t*)&set, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((void**)&pData, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pData);
|
|
*readStreamPtrPtr += 8;
|
|
if (pData) {
|
|
vkReadStream->alloc((void**)&pData, sizeof(const uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, sizeof(const uint8_t));
|
|
*readStreamPtrPtr += sizeof(const uint8_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdPushDescriptorSetWithTemplateKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)descriptorUpdateTemplate,
|
|
(unsigned long long)layout, (unsigned long long)set,
|
|
(unsigned long long)pData);
|
|
}
|
|
vk->vkCmdPushDescriptorSetWithTemplateKHR(
|
|
unboxed_commandBuffer, descriptorUpdateTemplate, layout, set, pData);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdPushDescriptorSetWithTemplateKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
descriptorUpdateTemplate, layout, set, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_shader_float16_int8
|
|
#endif
|
|
#ifdef VK_KHR_16bit_storage
|
|
#endif
|
|
#ifdef VK_KHR_incremental_present
|
|
#endif
|
|
#ifdef VK_KHR_descriptor_update_template
|
|
case OP_vkCreateDescriptorUpdateTemplateKHR: {
|
|
android::base::beginTrace("vkCreateDescriptorUpdateTemplateKHR decode");
|
|
VkDevice device;
|
|
const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkDescriptorUpdateTemplateCreateInfo));
|
|
reservedunmarshal_VkDescriptorUpdateTemplateCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorUpdateTemplateCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pDescriptorUpdateTemplate;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDescriptorUpdateTemplate,
|
|
sizeof(VkDescriptorUpdateTemplate));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate =
|
|
(VkDescriptorUpdateTemplate)(VkDescriptorUpdateTemplate)((
|
|
VkDescriptorUpdateTemplate)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDescriptorUpdateTemplateCreateInfo(
|
|
m_state, (VkDescriptorUpdateTemplateCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateDescriptorUpdateTemplateKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator,
|
|
(unsigned long long)pDescriptorUpdateTemplate);
|
|
}
|
|
VkResult vkCreateDescriptorUpdateTemplateKHR_VkResult_return = (VkResult)0;
|
|
vkCreateDescriptorUpdateTemplateKHR_VkResult_return =
|
|
m_state->on_vkCreateDescriptorUpdateTemplateKHR(
|
|
&m_pool, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
|
|
if ((vkCreateDescriptorUpdateTemplateKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDescriptorUpdateTemplateKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pDescriptorUpdateTemplate;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkDescriptorUpdateTemplate),
|
|
"handle map overwrite requires VkDescriptorUpdateTemplate to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate(
|
|
(VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 1);
|
|
vkStream->write((VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pDescriptorUpdateTemplate;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateDescriptorUpdateTemplateKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDescriptorUpdateTemplateKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDescriptorUpdateTemplateKHR_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pDescriptorUpdateTemplate);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyDescriptorUpdateTemplateKHR: {
|
|
android::base::beginTrace("vkDestroyDescriptorUpdateTemplateKHR decode");
|
|
VkDevice device;
|
|
VkDescriptorUpdateTemplate descriptorUpdateTemplate;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for
|
|
// descriptorUpdateTemplate;
|
|
VkDescriptorUpdateTemplate boxed_descriptorUpdateTemplate_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate =
|
|
(VkDescriptorUpdateTemplate)(VkDescriptorUpdateTemplate)((
|
|
VkDescriptorUpdateTemplate)(*&cgen_var_1));
|
|
boxed_descriptorUpdateTemplate_preserve = descriptorUpdateTemplate;
|
|
descriptorUpdateTemplate =
|
|
unbox_VkDescriptorUpdateTemplate(descriptorUpdateTemplate);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyDescriptorUpdateTemplateKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)descriptorUpdateTemplate,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroyDescriptorUpdateTemplateKHR(
|
|
&m_pool, device, descriptorUpdateTemplate, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyDescriptorUpdateTemplateKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_descriptorUpdateTemplate_preserve, pAllocator);
|
|
}
|
|
delete_VkDescriptorUpdateTemplate(boxed_descriptorUpdateTemplate_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkUpdateDescriptorSetWithTemplateKHR: {
|
|
android::base::beginTrace("vkUpdateDescriptorSetWithTemplateKHR decode");
|
|
VkDevice device;
|
|
VkDescriptorSet descriptorSet;
|
|
VkDescriptorUpdateTemplate descriptorUpdateTemplate;
|
|
const void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorSet*)&descriptorSet =
|
|
(VkDescriptorSet)unbox_VkDescriptorSet((VkDescriptorSet)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate =
|
|
(VkDescriptorUpdateTemplate)unbox_VkDescriptorUpdateTemplate(
|
|
(VkDescriptorUpdateTemplate)(*&cgen_var_2));
|
|
// WARNING PTR CHECK
|
|
memcpy((void**)&pData, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pData);
|
|
*readStreamPtrPtr += 8;
|
|
if (pData) {
|
|
vkReadStream->alloc((void**)&pData, sizeof(const uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, sizeof(const uint8_t));
|
|
*readStreamPtrPtr += sizeof(const uint8_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkUpdateDescriptorSetWithTemplateKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)descriptorSet,
|
|
(unsigned long long)descriptorUpdateTemplate,
|
|
(unsigned long long)pData);
|
|
}
|
|
vk->vkUpdateDescriptorSetWithTemplateKHR(unboxed_device, descriptorSet,
|
|
descriptorUpdateTemplate, pData);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkUpdateDescriptorSetWithTemplateKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, descriptorSet,
|
|
descriptorUpdateTemplate, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_imageless_framebuffer
|
|
#endif
|
|
#ifdef VK_KHR_create_renderpass2
|
|
case OP_vkCreateRenderPass2KHR: {
|
|
android::base::beginTrace("vkCreateRenderPass2KHR decode");
|
|
VkDevice device;
|
|
const VkRenderPassCreateInfo2* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkRenderPass* pRenderPass;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkRenderPassCreateInfo2));
|
|
reservedunmarshal_VkRenderPassCreateInfo2(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRenderPassCreateInfo2*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pRenderPass;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pRenderPass, sizeof(VkRenderPass));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkRenderPass*)pRenderPass =
|
|
(VkRenderPass)(VkRenderPass)((VkRenderPass)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkRenderPassCreateInfo2(
|
|
m_state, (VkRenderPassCreateInfo2*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateRenderPass2KHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pRenderPass);
|
|
}
|
|
VkResult vkCreateRenderPass2KHR_VkResult_return = (VkResult)0;
|
|
vkCreateRenderPass2KHR_VkResult_return = m_state->on_vkCreateRenderPass2KHR(
|
|
&m_pool, device, pCreateInfo, pAllocator, pRenderPass);
|
|
if ((vkCreateRenderPass2KHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateRenderPass2KHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pRenderPass;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkRenderPass),
|
|
"handle map overwrite requires VkRenderPass to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkRenderPass((VkRenderPass*)pRenderPass, 1);
|
|
vkStream->write((VkRenderPass*)pRenderPass, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pRenderPass;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateRenderPass2KHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateRenderPass2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateRenderPass2KHR_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pRenderPass);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBeginRenderPass2KHR: {
|
|
android::base::beginTrace("vkCmdBeginRenderPass2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkRenderPassBeginInfo* pRenderPassBegin;
|
|
const VkSubpassBeginInfo* pSubpassBeginInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pRenderPassBegin, sizeof(const VkRenderPassBeginInfo));
|
|
reservedunmarshal_VkRenderPassBeginInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRenderPassBeginInfo*)(pRenderPassBegin),
|
|
readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pSubpassBeginInfo, sizeof(const VkSubpassBeginInfo));
|
|
reservedunmarshal_VkSubpassBeginInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo),
|
|
readStreamPtrPtr);
|
|
if (pRenderPassBegin) {
|
|
transform_tohost_VkRenderPassBeginInfo(
|
|
m_state, (VkRenderPassBeginInfo*)(pRenderPassBegin));
|
|
}
|
|
if (pSubpassBeginInfo) {
|
|
transform_tohost_VkSubpassBeginInfo(m_state,
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBeginRenderPass2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pRenderPassBegin,
|
|
(unsigned long long)pSubpassBeginInfo);
|
|
}
|
|
vk->vkCmdBeginRenderPass2KHR(unboxed_commandBuffer, pRenderPassBegin,
|
|
pSubpassBeginInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginRenderPass2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pRenderPassBegin, pSubpassBeginInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdNextSubpass2KHR: {
|
|
android::base::beginTrace("vkCmdNextSubpass2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkSubpassBeginInfo* pSubpassBeginInfo;
|
|
const VkSubpassEndInfo* pSubpassEndInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pSubpassBeginInfo, sizeof(const VkSubpassBeginInfo));
|
|
reservedunmarshal_VkSubpassBeginInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo),
|
|
readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pSubpassEndInfo, sizeof(const VkSubpassEndInfo));
|
|
reservedunmarshal_VkSubpassEndInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo),
|
|
readStreamPtrPtr);
|
|
if (pSubpassBeginInfo) {
|
|
transform_tohost_VkSubpassBeginInfo(m_state,
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo));
|
|
}
|
|
if (pSubpassEndInfo) {
|
|
transform_tohost_VkSubpassEndInfo(m_state,
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdNextSubpass2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pSubpassBeginInfo,
|
|
(unsigned long long)pSubpassEndInfo);
|
|
}
|
|
vk->vkCmdNextSubpass2KHR(unboxed_commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdNextSubpass2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pSubpassBeginInfo, pSubpassEndInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndRenderPass2KHR: {
|
|
android::base::beginTrace("vkCmdEndRenderPass2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkSubpassEndInfo* pSubpassEndInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pSubpassEndInfo, sizeof(const VkSubpassEndInfo));
|
|
reservedunmarshal_VkSubpassEndInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo),
|
|
readStreamPtrPtr);
|
|
if (pSubpassEndInfo) {
|
|
transform_tohost_VkSubpassEndInfo(m_state,
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdEndRenderPass2KHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pSubpassEndInfo);
|
|
}
|
|
vk->vkCmdEndRenderPass2KHR(unboxed_commandBuffer, pSubpassEndInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndRenderPass2KHR(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, pSubpassEndInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_shared_presentable_image
|
|
case OP_vkGetSwapchainStatusKHR: {
|
|
android::base::beginTrace("vkGetSwapchainStatusKHR decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetSwapchainStatusKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain);
|
|
}
|
|
VkResult vkGetSwapchainStatusKHR_VkResult_return = (VkResult)0;
|
|
vkGetSwapchainStatusKHR_VkResult_return =
|
|
vk->vkGetSwapchainStatusKHR(unboxed_device, swapchain);
|
|
if ((vkGetSwapchainStatusKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetSwapchainStatusKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetSwapchainStatusKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetSwapchainStatusKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetSwapchainStatusKHR_VkResult_return, device, swapchain);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_external_fence_capabilities
|
|
case OP_vkGetPhysicalDeviceExternalFencePropertiesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceExternalFencePropertiesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo;
|
|
VkExternalFenceProperties* pExternalFenceProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pExternalFenceInfo,
|
|
sizeof(const VkPhysicalDeviceExternalFenceInfo));
|
|
reservedunmarshal_VkPhysicalDeviceExternalFenceInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceExternalFenceInfo*)(pExternalFenceInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pExternalFenceProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pExternalFenceProperties,
|
|
sizeof(VkExternalFenceProperties));
|
|
reservedunmarshal_VkExternalFenceProperties(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalFenceProperties*)(pExternalFenceProperties), readStreamPtrPtr);
|
|
if (pExternalFenceInfo) {
|
|
transform_tohost_VkPhysicalDeviceExternalFenceInfo(
|
|
m_state, (VkPhysicalDeviceExternalFenceInfo*)(pExternalFenceInfo));
|
|
}
|
|
if (pExternalFenceProperties) {
|
|
transform_tohost_VkExternalFenceProperties(
|
|
m_state, (VkExternalFenceProperties*)(pExternalFenceProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceExternalFencePropertiesKHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pExternalFenceInfo,
|
|
(unsigned long long)pExternalFenceProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceExternalFencePropertiesKHR(
|
|
unboxed_physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pExternalFenceProperties) {
|
|
transform_fromhost_VkExternalFenceProperties(
|
|
m_state, (VkExternalFenceProperties*)(pExternalFenceProperties));
|
|
}
|
|
marshal_VkExternalFenceProperties(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalFenceProperties*)(pExternalFenceProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceExternalFencePropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pExternalFenceInfo, pExternalFenceProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_external_fence
|
|
#endif
|
|
#ifdef VK_KHR_external_fence_win32
|
|
case OP_vkImportFenceWin32HandleKHR: {
|
|
android::base::beginTrace("vkImportFenceWin32HandleKHR decode");
|
|
VkDevice device;
|
|
const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pImportFenceWin32HandleInfo,
|
|
sizeof(const VkImportFenceWin32HandleInfoKHR));
|
|
reservedunmarshal_VkImportFenceWin32HandleInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImportFenceWin32HandleInfoKHR*)(pImportFenceWin32HandleInfo),
|
|
readStreamPtrPtr);
|
|
if (pImportFenceWin32HandleInfo) {
|
|
transform_tohost_VkImportFenceWin32HandleInfoKHR(
|
|
m_state, (VkImportFenceWin32HandleInfoKHR*)(pImportFenceWin32HandleInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkImportFenceWin32HandleKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pImportFenceWin32HandleInfo);
|
|
}
|
|
VkResult vkImportFenceWin32HandleKHR_VkResult_return = (VkResult)0;
|
|
vkImportFenceWin32HandleKHR_VkResult_return =
|
|
vk->vkImportFenceWin32HandleKHR(unboxed_device, pImportFenceWin32HandleInfo);
|
|
if ((vkImportFenceWin32HandleKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkImportFenceWin32HandleKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkImportFenceWin32HandleKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkImportFenceWin32HandleKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkImportFenceWin32HandleKHR_VkResult_return, device,
|
|
pImportFenceWin32HandleInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetFenceWin32HandleKHR: {
|
|
android::base::beginTrace("vkGetFenceWin32HandleKHR decode");
|
|
VkDevice device;
|
|
const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo;
|
|
HANDLE* pHandle;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pGetWin32HandleInfo,
|
|
sizeof(const VkFenceGetWin32HandleInfoKHR));
|
|
reservedunmarshal_VkFenceGetWin32HandleInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFenceGetWin32HandleInfoKHR*)(pGetWin32HandleInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pHandle;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pHandle, sizeof(HANDLE));
|
|
memcpy((HANDLE*)pHandle, *readStreamPtrPtr, sizeof(HANDLE));
|
|
*readStreamPtrPtr += sizeof(HANDLE);
|
|
if (pGetWin32HandleInfo) {
|
|
transform_tohost_VkFenceGetWin32HandleInfoKHR(
|
|
m_state, (VkFenceGetWin32HandleInfoKHR*)(pGetWin32HandleInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetFenceWin32HandleKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pGetWin32HandleInfo, (unsigned long long)pHandle);
|
|
}
|
|
VkResult vkGetFenceWin32HandleKHR_VkResult_return = (VkResult)0;
|
|
vkGetFenceWin32HandleKHR_VkResult_return =
|
|
vk->vkGetFenceWin32HandleKHR(unboxed_device, pGetWin32HandleInfo, pHandle);
|
|
if ((vkGetFenceWin32HandleKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetFenceWin32HandleKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((HANDLE*)pHandle, sizeof(HANDLE));
|
|
vkStream->write(&vkGetFenceWin32HandleKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetFenceWin32HandleKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetFenceWin32HandleKHR_VkResult_return, device, pGetWin32HandleInfo,
|
|
pHandle);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_external_fence_fd
|
|
case OP_vkImportFenceFdKHR: {
|
|
android::base::beginTrace("vkImportFenceFdKHR decode");
|
|
VkDevice device;
|
|
const VkImportFenceFdInfoKHR* pImportFenceFdInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pImportFenceFdInfo,
|
|
sizeof(const VkImportFenceFdInfoKHR));
|
|
reservedunmarshal_VkImportFenceFdInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImportFenceFdInfoKHR*)(pImportFenceFdInfo), readStreamPtrPtr);
|
|
if (pImportFenceFdInfo) {
|
|
transform_tohost_VkImportFenceFdInfoKHR(
|
|
m_state, (VkImportFenceFdInfoKHR*)(pImportFenceFdInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkImportFenceFdKHR 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)device, (unsigned long long)pImportFenceFdInfo);
|
|
}
|
|
VkResult vkImportFenceFdKHR_VkResult_return = (VkResult)0;
|
|
vkImportFenceFdKHR_VkResult_return =
|
|
vk->vkImportFenceFdKHR(unboxed_device, pImportFenceFdInfo);
|
|
if ((vkImportFenceFdKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkImportFenceFdKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkImportFenceFdKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkImportFenceFdKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkImportFenceFdKHR_VkResult_return, device, pImportFenceFdInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetFenceFdKHR: {
|
|
android::base::beginTrace("vkGetFenceFdKHR decode");
|
|
VkDevice device;
|
|
const VkFenceGetFdInfoKHR* pGetFdInfo;
|
|
int* pFd;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pGetFdInfo, sizeof(const VkFenceGetFdInfoKHR));
|
|
reservedunmarshal_VkFenceGetFdInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFenceGetFdInfoKHR*)(pGetFdInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pFd;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFd, sizeof(int));
|
|
memcpy((int*)pFd, *readStreamPtrPtr, sizeof(int));
|
|
*readStreamPtrPtr += sizeof(int);
|
|
if (pGetFdInfo) {
|
|
transform_tohost_VkFenceGetFdInfoKHR(m_state,
|
|
(VkFenceGetFdInfoKHR*)(pGetFdInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetFenceFdKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pGetFdInfo,
|
|
(unsigned long long)pFd);
|
|
}
|
|
VkResult vkGetFenceFdKHR_VkResult_return = (VkResult)0;
|
|
vkGetFenceFdKHR_VkResult_return =
|
|
vk->vkGetFenceFdKHR(unboxed_device, pGetFdInfo, pFd);
|
|
if ((vkGetFenceFdKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetFenceFdKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((int*)pFd, sizeof(int));
|
|
vkStream->write(&vkGetFenceFdKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetFenceFdKHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkGetFenceFdKHR_VkResult_return,
|
|
device, pGetFdInfo, pFd);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_performance_query
|
|
case OP_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR: {
|
|
android::base::beginTrace(
|
|
"vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t queueFamilyIndex;
|
|
uint32_t* pCounterCount;
|
|
VkPerformanceCounterKHR* pCounters;
|
|
VkPerformanceCounterDescriptionKHR* pCounterDescriptions;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((uint32_t*)&queueFamilyIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for pCounterCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pCounterCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCounterCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCounterCount) {
|
|
vkReadStream->alloc((void**)&pCounterCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pCounterCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pCounters;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPerformanceCounterKHR**)&pCounters, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCounters);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCounters) {
|
|
vkReadStream->alloc((void**)&pCounters,
|
|
(*(pCounterCount)) * sizeof(VkPerformanceCounterKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i) {
|
|
reservedunmarshal_VkPerformanceCounterKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceCounterKHR*)(pCounters + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pCounterDescriptions;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPerformanceCounterDescriptionKHR**)&pCounterDescriptions,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCounterDescriptions);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCounterDescriptions) {
|
|
vkReadStream->alloc(
|
|
(void**)&pCounterDescriptions,
|
|
(*(pCounterCount)) * sizeof(VkPerformanceCounterDescriptionKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i) {
|
|
reservedunmarshal_VkPerformanceCounterDescriptionKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pCounterCount) {
|
|
if (pCounters) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i) {
|
|
transform_tohost_VkPerformanceCounterKHR(
|
|
m_state, (VkPerformanceCounterKHR*)(pCounters + i));
|
|
}
|
|
}
|
|
}
|
|
if (pCounterCount) {
|
|
if (pCounterDescriptions) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i) {
|
|
transform_tohost_VkPerformanceCounterDescriptionKHR(
|
|
m_state,
|
|
(VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call "
|
|
"vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)queueFamilyIndex, (unsigned long long)pCounterCount,
|
|
(unsigned long long)pCounters,
|
|
(unsigned long long)pCounterDescriptions);
|
|
}
|
|
VkResult
|
|
vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR_VkResult_return =
|
|
(VkResult)0;
|
|
vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR_VkResult_return =
|
|
vk->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
|
|
unboxed_physicalDevice, queueFamilyIndex, pCounterCount, pCounters,
|
|
pCounterDescriptions);
|
|
if ((vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pCounterCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pCounterCount) {
|
|
vkStream->write((uint32_t*)pCounterCount, sizeof(uint32_t));
|
|
}
|
|
if (pCounterCount) {
|
|
if (pCounters) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i) {
|
|
transform_fromhost_VkPerformanceCounterKHR(
|
|
m_state, (VkPerformanceCounterKHR*)(pCounters + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pCounters;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pCounters) {
|
|
if (pCounterCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i) {
|
|
marshal_VkPerformanceCounterKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceCounterKHR*)(pCounters + i));
|
|
}
|
|
}
|
|
}
|
|
if (pCounterCount) {
|
|
if (pCounterDescriptions) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i) {
|
|
transform_fromhost_VkPerformanceCounterDescriptionKHR(
|
|
m_state,
|
|
(VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_6 = (uint64_t)(uintptr_t)pCounterDescriptions;
|
|
vkStream->putBe64(cgen_var_6);
|
|
if (pCounterDescriptions) {
|
|
if (pCounterCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i) {
|
|
marshal_VkPerformanceCounterDescriptionKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(
|
|
&vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()
|
|
->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR_VkResult_return,
|
|
physicalDevice, queueFamilyIndex, pCounterCount, pCounters,
|
|
pCounterDescriptions);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR: {
|
|
android::base::beginTrace(
|
|
"vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo;
|
|
uint32_t* pNumPasses;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pPerformanceQueryCreateInfo,
|
|
sizeof(const VkQueryPoolPerformanceCreateInfoKHR));
|
|
reservedunmarshal_VkQueryPoolPerformanceCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkQueryPoolPerformanceCreateInfoKHR*)(pPerformanceQueryCreateInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pNumPasses;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pNumPasses, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pNumPasses, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (pPerformanceQueryCreateInfo) {
|
|
transform_tohost_VkQueryPoolPerformanceCreateInfoKHR(
|
|
m_state,
|
|
(VkQueryPoolPerformanceCreateInfoKHR*)(pPerformanceQueryCreateInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pPerformanceQueryCreateInfo,
|
|
(unsigned long long)pNumPasses);
|
|
}
|
|
vk->vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
|
|
unboxed_physicalDevice, pPerformanceQueryCreateInfo, pNumPasses);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint32_t*)pNumPasses, sizeof(uint32_t));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice,
|
|
pPerformanceQueryCreateInfo, pNumPasses);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkAcquireProfilingLockKHR: {
|
|
android::base::beginTrace("vkAcquireProfilingLockKHR decode");
|
|
VkDevice device;
|
|
const VkAcquireProfilingLockInfoKHR* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkAcquireProfilingLockInfoKHR));
|
|
reservedunmarshal_VkAcquireProfilingLockInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAcquireProfilingLockInfoKHR*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkAcquireProfilingLockInfoKHR(
|
|
m_state, (VkAcquireProfilingLockInfoKHR*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkAcquireProfilingLockKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
VkResult vkAcquireProfilingLockKHR_VkResult_return = (VkResult)0;
|
|
vkAcquireProfilingLockKHR_VkResult_return =
|
|
vk->vkAcquireProfilingLockKHR(unboxed_device, pInfo);
|
|
if ((vkAcquireProfilingLockKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAcquireProfilingLockKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkAcquireProfilingLockKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAcquireProfilingLockKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAcquireProfilingLockKHR_VkResult_return, device, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkReleaseProfilingLockKHR: {
|
|
android::base::beginTrace("vkReleaseProfilingLockKHR decode");
|
|
VkDevice device;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkReleaseProfilingLockKHR 0x%llx \n", ioStream,
|
|
(unsigned long long)device);
|
|
}
|
|
vk->vkReleaseProfilingLockKHR(unboxed_device);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkReleaseProfilingLockKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_maintenance2
|
|
#endif
|
|
#ifdef VK_KHR_get_surface_capabilities2
|
|
case OP_vkGetPhysicalDeviceSurfaceCapabilities2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSurfaceCapabilities2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo;
|
|
VkSurfaceCapabilities2KHR* pSurfaceCapabilities;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pSurfaceInfo,
|
|
sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
|
|
reservedunmarshal_VkPhysicalDeviceSurfaceInfo2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceSurfaceInfo2KHR*)(pSurfaceInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pSurfaceCapabilities;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurfaceCapabilities,
|
|
sizeof(VkSurfaceCapabilities2KHR));
|
|
reservedunmarshal_VkSurfaceCapabilities2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities), readStreamPtrPtr);
|
|
if (pSurfaceInfo) {
|
|
transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(
|
|
m_state, (VkPhysicalDeviceSurfaceInfo2KHR*)(pSurfaceInfo));
|
|
}
|
|
if (pSurfaceCapabilities) {
|
|
transform_tohost_VkSurfaceCapabilities2KHR(
|
|
m_state, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSurfaceCapabilities2KHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pSurfaceInfo,
|
|
(unsigned long long)pSurfaceCapabilities);
|
|
}
|
|
VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceSurfaceCapabilities2KHR(
|
|
unboxed_physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
|
|
if ((vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pSurfaceCapabilities) {
|
|
transform_fromhost_VkSurfaceCapabilities2KHR(
|
|
m_state, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
|
|
}
|
|
marshal_VkSurfaceCapabilities2KHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
|
|
vkStream->write(&vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSurfaceCapabilities2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return, physicalDevice,
|
|
pSurfaceInfo, pSurfaceCapabilities);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceSurfaceFormats2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSurfaceFormats2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo;
|
|
uint32_t* pSurfaceFormatCount;
|
|
VkSurfaceFormat2KHR* pSurfaceFormats;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pSurfaceInfo,
|
|
sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
|
|
reservedunmarshal_VkPhysicalDeviceSurfaceInfo2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceSurfaceInfo2KHR*)(pSurfaceInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pSurfaceFormatCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pSurfaceFormatCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSurfaceFormatCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSurfaceFormatCount) {
|
|
vkReadStream->alloc((void**)&pSurfaceFormatCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pSurfaceFormatCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurfaceFormats;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSurfaceFormat2KHR**)&pSurfaceFormats, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSurfaceFormats);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSurfaceFormats) {
|
|
vkReadStream->alloc((void**)&pSurfaceFormats,
|
|
(*(pSurfaceFormatCount)) * sizeof(VkSurfaceFormat2KHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i) {
|
|
reservedunmarshal_VkSurfaceFormat2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceFormat2KHR*)(pSurfaceFormats + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pSurfaceInfo) {
|
|
transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(
|
|
m_state, (VkPhysicalDeviceSurfaceInfo2KHR*)(pSurfaceInfo));
|
|
}
|
|
if (pSurfaceFormatCount) {
|
|
if (pSurfaceFormats) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i) {
|
|
transform_tohost_VkSurfaceFormat2KHR(
|
|
m_state, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSurfaceFormats2KHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pSurfaceInfo,
|
|
(unsigned long long)pSurfaceFormatCount,
|
|
(unsigned long long)pSurfaceFormats);
|
|
}
|
|
VkResult vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceSurfaceFormats2KHR(unboxed_physicalDevice, pSurfaceInfo,
|
|
pSurfaceFormatCount, pSurfaceFormats);
|
|
if ((vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pSurfaceFormatCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pSurfaceFormatCount) {
|
|
vkStream->write((uint32_t*)pSurfaceFormatCount, sizeof(uint32_t));
|
|
}
|
|
if (pSurfaceFormatCount) {
|
|
if (pSurfaceFormats) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i) {
|
|
transform_fromhost_VkSurfaceFormat2KHR(
|
|
m_state, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pSurfaceFormats;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pSurfaceFormats) {
|
|
if (pSurfaceFormatCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i) {
|
|
marshal_VkSurfaceFormat2KHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSurfaceFormats2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return, physicalDevice,
|
|
pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_variable_pointers
|
|
#endif
|
|
#ifdef VK_KHR_get_display_properties2
|
|
case OP_vkGetPhysicalDeviceDisplayProperties2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceDisplayProperties2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pPropertyCount;
|
|
VkDisplayProperties2KHR* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDisplayProperties2KHR**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkDisplayProperties2KHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkDisplayProperties2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayProperties2KHR*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkDisplayProperties2KHR(
|
|
m_state, (VkDisplayProperties2KHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceDisplayProperties2KHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pPropertyCount, (unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceDisplayProperties2KHR(unboxed_physicalDevice,
|
|
pPropertyCount, pProperties);
|
|
if ((vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkDisplayProperties2KHR(
|
|
m_state, (VkDisplayProperties2KHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkDisplayProperties2KHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayProperties2KHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceDisplayProperties2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return, physicalDevice,
|
|
pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceDisplayPlaneProperties2KHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceDisplayPlaneProperties2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pPropertyCount;
|
|
VkDisplayPlaneProperties2KHR* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDisplayPlaneProperties2KHR**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkDisplayPlaneProperties2KHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkDisplayPlaneProperties2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPlaneProperties2KHR*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkDisplayPlaneProperties2KHR(
|
|
m_state, (VkDisplayPlaneProperties2KHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceDisplayPlaneProperties2KHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pPropertyCount, (unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return =
|
|
(VkResult)0;
|
|
vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceDisplayPlaneProperties2KHR(unboxed_physicalDevice,
|
|
pPropertyCount, pProperties);
|
|
if ((vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkDisplayPlaneProperties2KHR(
|
|
m_state, (VkDisplayPlaneProperties2KHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkDisplayPlaneProperties2KHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPlaneProperties2KHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return,
|
|
physicalDevice, pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDisplayModeProperties2KHR: {
|
|
android::base::beginTrace("vkGetDisplayModeProperties2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkDisplayKHR display;
|
|
uint32_t* pPropertyCount;
|
|
VkDisplayModeProperties2KHR* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayKHR*)&display =
|
|
(VkDisplayKHR)unbox_VkDisplayKHR((VkDisplayKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDisplayModeProperties2KHR**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkDisplayModeProperties2KHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkDisplayModeProperties2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayModeProperties2KHR*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkDisplayModeProperties2KHR(
|
|
m_state, (VkDisplayModeProperties2KHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDisplayModeProperties2KHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)display, (unsigned long long)pPropertyCount,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetDisplayModeProperties2KHR_VkResult_return = (VkResult)0;
|
|
vkGetDisplayModeProperties2KHR_VkResult_return = vk->vkGetDisplayModeProperties2KHR(
|
|
unboxed_physicalDevice, display, pPropertyCount, pProperties);
|
|
if ((vkGetDisplayModeProperties2KHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetDisplayModeProperties2KHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkDisplayModeProperties2KHR(
|
|
m_state, (VkDisplayModeProperties2KHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkDisplayModeProperties2KHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayModeProperties2KHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetDisplayModeProperties2KHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDisplayModeProperties2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDisplayModeProperties2KHR_VkResult_return, physicalDevice, display,
|
|
pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDisplayPlaneCapabilities2KHR: {
|
|
android::base::beginTrace("vkGetDisplayPlaneCapabilities2KHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo;
|
|
VkDisplayPlaneCapabilities2KHR* pCapabilities;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pDisplayPlaneInfo,
|
|
sizeof(const VkDisplayPlaneInfo2KHR));
|
|
reservedunmarshal_VkDisplayPlaneInfo2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPlaneInfo2KHR*)(pDisplayPlaneInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pCapabilities;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCapabilities, sizeof(VkDisplayPlaneCapabilities2KHR));
|
|
reservedunmarshal_VkDisplayPlaneCapabilities2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPlaneCapabilities2KHR*)(pCapabilities), readStreamPtrPtr);
|
|
if (pDisplayPlaneInfo) {
|
|
transform_tohost_VkDisplayPlaneInfo2KHR(
|
|
m_state, (VkDisplayPlaneInfo2KHR*)(pDisplayPlaneInfo));
|
|
}
|
|
if (pCapabilities) {
|
|
transform_tohost_VkDisplayPlaneCapabilities2KHR(
|
|
m_state, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetDisplayPlaneCapabilities2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pDisplayPlaneInfo, (unsigned long long)pCapabilities);
|
|
}
|
|
VkResult vkGetDisplayPlaneCapabilities2KHR_VkResult_return = (VkResult)0;
|
|
vkGetDisplayPlaneCapabilities2KHR_VkResult_return =
|
|
vk->vkGetDisplayPlaneCapabilities2KHR(unboxed_physicalDevice, pDisplayPlaneInfo,
|
|
pCapabilities);
|
|
if ((vkGetDisplayPlaneCapabilities2KHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetDisplayPlaneCapabilities2KHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pCapabilities) {
|
|
transform_fromhost_VkDisplayPlaneCapabilities2KHR(
|
|
m_state, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
|
|
}
|
|
marshal_VkDisplayPlaneCapabilities2KHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
|
|
vkStream->write(&vkGetDisplayPlaneCapabilities2KHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDisplayPlaneCapabilities2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDisplayPlaneCapabilities2KHR_VkResult_return, physicalDevice,
|
|
pDisplayPlaneInfo, pCapabilities);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_dedicated_allocation
|
|
#endif
|
|
#ifdef VK_KHR_storage_buffer_storage_class
|
|
#endif
|
|
#ifdef VK_KHR_relaxed_block_layout
|
|
#endif
|
|
#ifdef VK_KHR_get_memory_requirements2
|
|
case OP_vkGetImageMemoryRequirements2KHR: {
|
|
android::base::beginTrace("vkGetImageMemoryRequirements2KHR decode");
|
|
VkDevice device;
|
|
const VkImageMemoryRequirementsInfo2* pInfo;
|
|
VkMemoryRequirements2* pMemoryRequirements;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkImageMemoryRequirementsInfo2));
|
|
reservedunmarshal_VkImageMemoryRequirementsInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageMemoryRequirementsInfo2*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements2));
|
|
reservedunmarshal_VkMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkImageMemoryRequirementsInfo2(
|
|
m_state, (VkImageMemoryRequirementsInfo2*)(pInfo));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetImageMemoryRequirements2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
m_state->on_vkGetImageMemoryRequirements2KHR(&m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageMemoryRequirements2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetBufferMemoryRequirements2KHR: {
|
|
android::base::beginTrace("vkGetBufferMemoryRequirements2KHR decode");
|
|
VkDevice device;
|
|
const VkBufferMemoryRequirementsInfo2* pInfo;
|
|
VkMemoryRequirements2* pMemoryRequirements;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkBufferMemoryRequirementsInfo2));
|
|
reservedunmarshal_VkBufferMemoryRequirementsInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferMemoryRequirementsInfo2*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements2));
|
|
reservedunmarshal_VkMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkBufferMemoryRequirementsInfo2(
|
|
m_state, (VkBufferMemoryRequirementsInfo2*)(pInfo));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetBufferMemoryRequirements2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
m_state->on_vkGetBufferMemoryRequirements2KHR(&m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBufferMemoryRequirements2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetImageSparseMemoryRequirements2KHR: {
|
|
android::base::beginTrace("vkGetImageSparseMemoryRequirements2KHR decode");
|
|
VkDevice device;
|
|
const VkImageSparseMemoryRequirementsInfo2* pInfo;
|
|
uint32_t* pSparseMemoryRequirementCount;
|
|
VkSparseImageMemoryRequirements2* pSparseMemoryRequirements;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkImageSparseMemoryRequirementsInfo2));
|
|
reservedunmarshal_VkImageSparseMemoryRequirementsInfo2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageSparseMemoryRequirementsInfo2*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pSparseMemoryRequirementCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pSparseMemoryRequirementCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSparseMemoryRequirementCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSparseMemoryRequirementCount) {
|
|
vkReadStream->alloc((void**)&pSparseMemoryRequirementCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pSparseMemoryRequirementCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSparseMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSparseImageMemoryRequirements2**)&pSparseMemoryRequirements,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSparseMemoryRequirements);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSparseMemoryRequirements) {
|
|
vkReadStream->alloc((void**)&pSparseMemoryRequirements,
|
|
(*(pSparseMemoryRequirementCount)) *
|
|
sizeof(VkSparseImageMemoryRequirements2));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
|
|
reservedunmarshal_VkSparseImageMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pInfo) {
|
|
transform_tohost_VkImageSparseMemoryRequirementsInfo2(
|
|
m_state, (VkImageSparseMemoryRequirementsInfo2*)(pInfo));
|
|
}
|
|
if (pSparseMemoryRequirementCount) {
|
|
if (pSparseMemoryRequirements) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
transform_tohost_VkSparseImageMemoryRequirements2(
|
|
m_state,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetImageSparseMemoryRequirements2KHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pSparseMemoryRequirementCount,
|
|
(unsigned long long)pSparseMemoryRequirements);
|
|
}
|
|
vk->vkGetImageSparseMemoryRequirements2KHR(unboxed_device, pInfo,
|
|
pSparseMemoryRequirementCount,
|
|
pSparseMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pSparseMemoryRequirementCount) {
|
|
vkStream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
|
|
}
|
|
if (pSparseMemoryRequirementCount) {
|
|
if (pSparseMemoryRequirements) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
transform_fromhost_VkSparseImageMemoryRequirements2(
|
|
m_state,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pSparseMemoryRequirements) {
|
|
if (pSparseMemoryRequirementCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
marshal_VkSparseImageMemoryRequirements2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageSparseMemoryRequirements2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pSparseMemoryRequirementCount, pSparseMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_image_format_list
|
|
#endif
|
|
#ifdef VK_KHR_sampler_ycbcr_conversion
|
|
case OP_vkCreateSamplerYcbcrConversionKHR: {
|
|
android::base::beginTrace("vkCreateSamplerYcbcrConversionKHR decode");
|
|
VkDevice device;
|
|
const VkSamplerYcbcrConversionCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSamplerYcbcrConversion* pYcbcrConversion;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkSamplerYcbcrConversionCreateInfo));
|
|
reservedunmarshal_VkSamplerYcbcrConversionCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSamplerYcbcrConversionCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pYcbcrConversion;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pYcbcrConversion, sizeof(VkSamplerYcbcrConversion));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSamplerYcbcrConversion*)pYcbcrConversion =
|
|
(VkSamplerYcbcrConversion)(VkSamplerYcbcrConversion)((
|
|
VkSamplerYcbcrConversion)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkSamplerYcbcrConversionCreateInfo(
|
|
m_state, (VkSamplerYcbcrConversionCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateSamplerYcbcrConversionKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pYcbcrConversion);
|
|
}
|
|
VkResult vkCreateSamplerYcbcrConversionKHR_VkResult_return = (VkResult)0;
|
|
vkCreateSamplerYcbcrConversionKHR_VkResult_return =
|
|
m_state->on_vkCreateSamplerYcbcrConversionKHR(&m_pool, device, pCreateInfo,
|
|
pAllocator, pYcbcrConversion);
|
|
if ((vkCreateSamplerYcbcrConversionKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateSamplerYcbcrConversionKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pYcbcrConversion;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkSamplerYcbcrConversion),
|
|
"handle map overwrite requires VkSamplerYcbcrConversion to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkSamplerYcbcrConversion(
|
|
(VkSamplerYcbcrConversion*)pYcbcrConversion, 1);
|
|
vkStream->write((VkSamplerYcbcrConversion*)pYcbcrConversion, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pYcbcrConversion;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateSamplerYcbcrConversionKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateSamplerYcbcrConversionKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateSamplerYcbcrConversionKHR_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pYcbcrConversion);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroySamplerYcbcrConversionKHR: {
|
|
android::base::beginTrace("vkDestroySamplerYcbcrConversionKHR decode");
|
|
VkDevice device;
|
|
VkSamplerYcbcrConversion ycbcrConversion;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for ycbcrConversion;
|
|
VkSamplerYcbcrConversion boxed_ycbcrConversion_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSamplerYcbcrConversion*)&ycbcrConversion =
|
|
(VkSamplerYcbcrConversion)(VkSamplerYcbcrConversion)((
|
|
VkSamplerYcbcrConversion)(*&cgen_var_1));
|
|
boxed_ycbcrConversion_preserve = ycbcrConversion;
|
|
ycbcrConversion = unbox_VkSamplerYcbcrConversion(ycbcrConversion);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroySamplerYcbcrConversionKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)ycbcrConversion, (unsigned long long)pAllocator);
|
|
}
|
|
m_state->on_vkDestroySamplerYcbcrConversionKHR(&m_pool, device, ycbcrConversion,
|
|
pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroySamplerYcbcrConversionKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_ycbcrConversion_preserve, pAllocator);
|
|
}
|
|
delete_VkSamplerYcbcrConversion(boxed_ycbcrConversion_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_bind_memory2
|
|
case OP_vkBindBufferMemory2KHR: {
|
|
android::base::beginTrace("vkBindBufferMemory2KHR decode");
|
|
VkDevice device;
|
|
uint32_t bindInfoCount;
|
|
const VkBindBufferMemoryInfo* pBindInfos;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&bindInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pBindInfos,
|
|
((bindInfoCount)) * sizeof(const VkBindBufferMemoryInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
reservedunmarshal_VkBindBufferMemoryInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBindBufferMemoryInfo*)(pBindInfos + i), readStreamPtrPtr);
|
|
}
|
|
if (pBindInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
transform_tohost_VkBindBufferMemoryInfo(
|
|
m_state, (VkBindBufferMemoryInfo*)(pBindInfos + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkBindBufferMemory2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)bindInfoCount,
|
|
(unsigned long long)pBindInfos);
|
|
}
|
|
VkResult vkBindBufferMemory2KHR_VkResult_return = (VkResult)0;
|
|
vkBindBufferMemory2KHR_VkResult_return =
|
|
m_state->on_vkBindBufferMemory2KHR(&m_pool, device, bindInfoCount, pBindInfos);
|
|
if ((vkBindBufferMemory2KHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBindBufferMemory2KHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBindBufferMemory2KHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBindBufferMemory2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBindBufferMemory2KHR_VkResult_return, device, bindInfoCount, pBindInfos);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBindImageMemory2KHR: {
|
|
android::base::beginTrace("vkBindImageMemory2KHR decode");
|
|
VkDevice device;
|
|
uint32_t bindInfoCount;
|
|
const VkBindImageMemoryInfo* pBindInfos;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&bindInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pBindInfos,
|
|
((bindInfoCount)) * sizeof(const VkBindImageMemoryInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
reservedunmarshal_VkBindImageMemoryInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBindImageMemoryInfo*)(pBindInfos + i), readStreamPtrPtr);
|
|
}
|
|
if (pBindInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
transform_tohost_VkBindImageMemoryInfo(
|
|
m_state, (VkBindImageMemoryInfo*)(pBindInfos + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkBindImageMemory2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)bindInfoCount,
|
|
(unsigned long long)pBindInfos);
|
|
}
|
|
VkResult vkBindImageMemory2KHR_VkResult_return = (VkResult)0;
|
|
vkBindImageMemory2KHR_VkResult_return =
|
|
m_state->on_vkBindImageMemory2KHR(&m_pool, device, bindInfoCount, pBindInfos);
|
|
if ((vkBindImageMemory2KHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBindImageMemory2KHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBindImageMemory2KHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBindImageMemory2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBindImageMemory2KHR_VkResult_return, device, bindInfoCount, pBindInfos);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_portability_subset
|
|
#endif
|
|
#ifdef VK_KHR_maintenance3
|
|
case OP_vkGetDescriptorSetLayoutSupportKHR: {
|
|
android::base::beginTrace("vkGetDescriptorSetLayoutSupportKHR decode");
|
|
VkDevice device;
|
|
const VkDescriptorSetLayoutCreateInfo* pCreateInfo;
|
|
VkDescriptorSetLayoutSupport* pSupport;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkDescriptorSetLayoutCreateInfo));
|
|
reservedunmarshal_VkDescriptorSetLayoutCreateInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorSetLayoutCreateInfo*)(pCreateInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pSupport;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSupport, sizeof(VkDescriptorSetLayoutSupport));
|
|
reservedunmarshal_VkDescriptorSetLayoutSupport(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorSetLayoutSupport*)(pSupport), readStreamPtrPtr);
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDescriptorSetLayoutCreateInfo(
|
|
m_state, (VkDescriptorSetLayoutCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pSupport) {
|
|
transform_tohost_VkDescriptorSetLayoutSupport(
|
|
m_state, (VkDescriptorSetLayoutSupport*)(pSupport));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDescriptorSetLayoutSupportKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pSupport);
|
|
}
|
|
vk->vkGetDescriptorSetLayoutSupportKHR(unboxed_device, pCreateInfo, pSupport);
|
|
vkStream->unsetHandleMapping();
|
|
if (pSupport) {
|
|
transform_fromhost_VkDescriptorSetLayoutSupport(
|
|
m_state, (VkDescriptorSetLayoutSupport*)(pSupport));
|
|
}
|
|
marshal_VkDescriptorSetLayoutSupport(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorSetLayoutSupport*)(pSupport));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDescriptorSetLayoutSupportKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pCreateInfo,
|
|
pSupport);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_draw_indirect_count
|
|
case OP_vkCmdDrawIndirectCountKHR: {
|
|
android::base::beginTrace("vkCmdDrawIndirectCountKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
VkBuffer countBuffer;
|
|
VkDeviceSize countBufferOffset;
|
|
uint32_t maxDrawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&countBufferOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&maxDrawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawIndirectCountKHR 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)countBuffer,
|
|
(unsigned long long)countBufferOffset, (unsigned long long)maxDrawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawIndirectCountKHR(unboxed_commandBuffer, buffer, offset, countBuffer,
|
|
countBufferOffset, maxDrawCount, stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndirectCountKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, countBuffer, countBufferOffset, maxDrawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawIndexedIndirectCountKHR: {
|
|
android::base::beginTrace("vkCmdDrawIndexedIndirectCountKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
VkBuffer countBuffer;
|
|
VkDeviceSize countBufferOffset;
|
|
uint32_t maxDrawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&countBufferOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&maxDrawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawIndexedIndirectCountKHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)countBuffer,
|
|
(unsigned long long)countBufferOffset, (unsigned long long)maxDrawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawIndexedIndirectCountKHR(unboxed_commandBuffer, buffer, offset,
|
|
countBuffer, countBufferOffset, maxDrawCount,
|
|
stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndexedIndirectCountKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, countBuffer, countBufferOffset, maxDrawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_shader_subgroup_extended_types
|
|
#endif
|
|
#ifdef VK_KHR_8bit_storage
|
|
#endif
|
|
#ifdef VK_KHR_shader_atomic_int64
|
|
#endif
|
|
#ifdef VK_KHR_shader_clock
|
|
#endif
|
|
#ifdef VK_KHR_driver_properties
|
|
#endif
|
|
#ifdef VK_KHR_shader_float_controls
|
|
#endif
|
|
#ifdef VK_KHR_depth_stencil_resolve
|
|
#endif
|
|
#ifdef VK_KHR_swapchain_mutable_format
|
|
#endif
|
|
#ifdef VK_KHR_timeline_semaphore
|
|
case OP_vkGetSemaphoreCounterValueKHR: {
|
|
android::base::beginTrace("vkGetSemaphoreCounterValueKHR decode");
|
|
VkDevice device;
|
|
VkSemaphore semaphore;
|
|
uint64_t* pValue;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSemaphore*)&semaphore =
|
|
(VkSemaphore)unbox_VkSemaphore((VkSemaphore)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pValue;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pValue, sizeof(uint64_t));
|
|
memcpy((uint64_t*)pValue, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetSemaphoreCounterValueKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)semaphore,
|
|
(unsigned long long)pValue);
|
|
}
|
|
VkResult vkGetSemaphoreCounterValueKHR_VkResult_return = (VkResult)0;
|
|
vkGetSemaphoreCounterValueKHR_VkResult_return =
|
|
vk->vkGetSemaphoreCounterValueKHR(unboxed_device, semaphore, pValue);
|
|
if ((vkGetSemaphoreCounterValueKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetSemaphoreCounterValueKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint64_t*)pValue, sizeof(uint64_t));
|
|
vkStream->write(&vkGetSemaphoreCounterValueKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetSemaphoreCounterValueKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetSemaphoreCounterValueKHR_VkResult_return, device, semaphore, pValue);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkWaitSemaphoresKHR: {
|
|
android::base::beginTrace("vkWaitSemaphoresKHR decode");
|
|
VkDevice device;
|
|
const VkSemaphoreWaitInfo* pWaitInfo;
|
|
uint64_t timeout;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pWaitInfo, sizeof(const VkSemaphoreWaitInfo));
|
|
reservedunmarshal_VkSemaphoreWaitInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSemaphoreWaitInfo*)(pWaitInfo),
|
|
readStreamPtrPtr);
|
|
memcpy((uint64_t*)&timeout, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (pWaitInfo) {
|
|
transform_tohost_VkSemaphoreWaitInfo(m_state,
|
|
(VkSemaphoreWaitInfo*)(pWaitInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkWaitSemaphoresKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pWaitInfo,
|
|
(unsigned long long)timeout);
|
|
}
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
VkResult vkWaitSemaphoresKHR_VkResult_return = (VkResult)0;
|
|
vkWaitSemaphoresKHR_VkResult_return =
|
|
vk->vkWaitSemaphoresKHR(unboxed_device, pWaitInfo, timeout);
|
|
if ((vkWaitSemaphoresKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkWaitSemaphoresKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkWaitSemaphoresKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkWaitSemaphoresKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkWaitSemaphoresKHR_VkResult_return, device, pWaitInfo, timeout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkSignalSemaphoreKHR: {
|
|
android::base::beginTrace("vkSignalSemaphoreKHR decode");
|
|
VkDevice device;
|
|
const VkSemaphoreSignalInfo* pSignalInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pSignalInfo, sizeof(const VkSemaphoreSignalInfo));
|
|
reservedunmarshal_VkSemaphoreSignalInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSemaphoreSignalInfo*)(pSignalInfo),
|
|
readStreamPtrPtr);
|
|
if (pSignalInfo) {
|
|
transform_tohost_VkSemaphoreSignalInfo(m_state,
|
|
(VkSemaphoreSignalInfo*)(pSignalInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkSignalSemaphoreKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pSignalInfo);
|
|
}
|
|
VkResult vkSignalSemaphoreKHR_VkResult_return = (VkResult)0;
|
|
vkSignalSemaphoreKHR_VkResult_return =
|
|
vk->vkSignalSemaphoreKHR(unboxed_device, pSignalInfo);
|
|
if ((vkSignalSemaphoreKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkSignalSemaphoreKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkSignalSemaphoreKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSignalSemaphoreKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkSignalSemaphoreKHR_VkResult_return, device, pSignalInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_vulkan_memory_model
|
|
#endif
|
|
#ifdef VK_KHR_shader_terminate_invocation
|
|
#endif
|
|
#ifdef VK_KHR_fragment_shading_rate
|
|
case OP_vkGetPhysicalDeviceFragmentShadingRatesKHR: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceFragmentShadingRatesKHR decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pFragmentShadingRateCount;
|
|
VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pFragmentShadingRateCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pFragmentShadingRateCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pFragmentShadingRateCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pFragmentShadingRateCount) {
|
|
vkReadStream->alloc((void**)&pFragmentShadingRateCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pFragmentShadingRateCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pFragmentShadingRates;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPhysicalDeviceFragmentShadingRateKHR**)&pFragmentShadingRates,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pFragmentShadingRates);
|
|
*readStreamPtrPtr += 8;
|
|
if (pFragmentShadingRates) {
|
|
vkReadStream->alloc((void**)&pFragmentShadingRates,
|
|
(*(pFragmentShadingRateCount)) *
|
|
sizeof(VkPhysicalDeviceFragmentShadingRateKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pFragmentShadingRateCount)); ++i) {
|
|
reservedunmarshal_VkPhysicalDeviceFragmentShadingRateKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pFragmentShadingRateCount) {
|
|
if (pFragmentShadingRates) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pFragmentShadingRateCount)); ++i) {
|
|
transform_tohost_VkPhysicalDeviceFragmentShadingRateKHR(
|
|
m_state,
|
|
(VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceFragmentShadingRatesKHR 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pFragmentShadingRateCount,
|
|
(unsigned long long)pFragmentShadingRates);
|
|
}
|
|
VkResult vkGetPhysicalDeviceFragmentShadingRatesKHR_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceFragmentShadingRatesKHR_VkResult_return =
|
|
vk->vkGetPhysicalDeviceFragmentShadingRatesKHR(
|
|
unboxed_physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates);
|
|
if ((vkGetPhysicalDeviceFragmentShadingRatesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceFragmentShadingRatesKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pFragmentShadingRateCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pFragmentShadingRateCount) {
|
|
vkStream->write((uint32_t*)pFragmentShadingRateCount, sizeof(uint32_t));
|
|
}
|
|
if (pFragmentShadingRateCount) {
|
|
if (pFragmentShadingRates) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pFragmentShadingRateCount)); ++i) {
|
|
transform_fromhost_VkPhysicalDeviceFragmentShadingRateKHR(
|
|
m_state,
|
|
(VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pFragmentShadingRates;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pFragmentShadingRates) {
|
|
if (pFragmentShadingRateCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pFragmentShadingRateCount)); ++i) {
|
|
marshal_VkPhysicalDeviceFragmentShadingRateKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceFragmentShadingRatesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceFragmentShadingRatesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceFragmentShadingRatesKHR_VkResult_return, physicalDevice,
|
|
pFragmentShadingRateCount, pFragmentShadingRates);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetFragmentShadingRateKHR: {
|
|
android::base::beginTrace("vkCmdSetFragmentShadingRateKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkExtent2D* pFragmentSize;
|
|
VkFragmentShadingRateCombinerOpKHR combinerOps[2];
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pFragmentSize, sizeof(const VkExtent2D));
|
|
reservedunmarshal_VkExtent2D(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExtent2D*)(pFragmentSize), readStreamPtrPtr);
|
|
memcpy((VkFragmentShadingRateCombinerOpKHR*)combinerOps, *readStreamPtrPtr,
|
|
2 * sizeof(const VkFragmentShadingRateCombinerOpKHR));
|
|
*readStreamPtrPtr += 2 * sizeof(const VkFragmentShadingRateCombinerOpKHR);
|
|
if (pFragmentSize) {
|
|
transform_tohost_VkExtent2D(m_state, (VkExtent2D*)(pFragmentSize));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdSetFragmentShadingRateKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pFragmentSize, (unsigned long long)combinerOps);
|
|
}
|
|
vk->vkCmdSetFragmentShadingRateKHR(unboxed_commandBuffer, pFragmentSize,
|
|
combinerOps);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetFragmentShadingRateKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pFragmentSize, combinerOps);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_spirv_1_4
|
|
#endif
|
|
#ifdef VK_KHR_surface_protected_capabilities
|
|
#endif
|
|
#ifdef VK_KHR_separate_depth_stencil_layouts
|
|
#endif
|
|
#ifdef VK_KHR_present_wait
|
|
case OP_vkWaitForPresentKHR: {
|
|
android::base::beginTrace("vkWaitForPresentKHR decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
uint64_t presentId;
|
|
uint64_t timeout;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
memcpy((uint64_t*)&presentId, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
memcpy((uint64_t*)&timeout, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkWaitForPresentKHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain,
|
|
(unsigned long long)presentId, (unsigned long long)timeout);
|
|
}
|
|
VkResult vkWaitForPresentKHR_VkResult_return = (VkResult)0;
|
|
vkWaitForPresentKHR_VkResult_return =
|
|
vk->vkWaitForPresentKHR(unboxed_device, swapchain, presentId, timeout);
|
|
if ((vkWaitForPresentKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkWaitForPresentKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkWaitForPresentKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkWaitForPresentKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkWaitForPresentKHR_VkResult_return, device, swapchain, presentId, timeout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_uniform_buffer_standard_layout
|
|
#endif
|
|
#ifdef VK_KHR_buffer_device_address
|
|
case OP_vkGetBufferDeviceAddressKHR: {
|
|
android::base::beginTrace("vkGetBufferDeviceAddressKHR decode");
|
|
VkDevice device;
|
|
const VkBufferDeviceAddressInfo* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkBufferDeviceAddressInfo));
|
|
reservedunmarshal_VkBufferDeviceAddressInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(pInfo),
|
|
readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkBufferDeviceAddressInfo(m_state,
|
|
(VkBufferDeviceAddressInfo*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetBufferDeviceAddressKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
VkDeviceAddress vkGetBufferDeviceAddressKHR_VkDeviceAddress_return =
|
|
(VkDeviceAddress)0;
|
|
vkGetBufferDeviceAddressKHR_VkDeviceAddress_return =
|
|
vk->vkGetBufferDeviceAddressKHR(unboxed_device, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetBufferDeviceAddressKHR_VkDeviceAddress_return,
|
|
sizeof(VkDeviceAddress));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBufferDeviceAddressKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetBufferDeviceAddressKHR_VkDeviceAddress_return, device, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetBufferOpaqueCaptureAddressKHR: {
|
|
android::base::beginTrace("vkGetBufferOpaqueCaptureAddressKHR decode");
|
|
VkDevice device;
|
|
const VkBufferDeviceAddressInfo* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkBufferDeviceAddressInfo));
|
|
reservedunmarshal_VkBufferDeviceAddressInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(pInfo),
|
|
readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkBufferDeviceAddressInfo(m_state,
|
|
(VkBufferDeviceAddressInfo*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetBufferOpaqueCaptureAddressKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
uint64_t vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return = (uint64_t)0;
|
|
vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return =
|
|
vk->vkGetBufferOpaqueCaptureAddressKHR(unboxed_device, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return,
|
|
sizeof(uint64_t));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBufferOpaqueCaptureAddressKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return, device, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceMemoryOpaqueCaptureAddressKHR: {
|
|
android::base::beginTrace("vkGetDeviceMemoryOpaqueCaptureAddressKHR decode");
|
|
VkDevice device;
|
|
const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkDeviceMemoryOpaqueCaptureAddressInfo));
|
|
reservedunmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceMemoryOpaqueCaptureAddressInfo*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkDeviceMemoryOpaqueCaptureAddressInfo(
|
|
m_state, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetDeviceMemoryOpaqueCaptureAddressKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
uint64_t vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return = (uint64_t)0;
|
|
vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return =
|
|
vk->vkGetDeviceMemoryOpaqueCaptureAddressKHR(unboxed_device, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return,
|
|
sizeof(uint64_t));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceMemoryOpaqueCaptureAddressKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return, device, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_deferred_host_operations
|
|
case OP_vkCreateDeferredOperationKHR: {
|
|
android::base::beginTrace("vkCreateDeferredOperationKHR decode");
|
|
VkDevice device;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDeferredOperationKHR* pDeferredOperation;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pDeferredOperation;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDeferredOperation, sizeof(VkDeferredOperationKHR));
|
|
memcpy((VkDeferredOperationKHR*)&(*pDeferredOperation), (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pDeferredOperation));
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateDeferredOperationKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pAllocator,
|
|
(unsigned long long)pDeferredOperation);
|
|
}
|
|
VkResult vkCreateDeferredOperationKHR_VkResult_return = (VkResult)0;
|
|
vkCreateDeferredOperationKHR_VkResult_return = vk->vkCreateDeferredOperationKHR(
|
|
unboxed_device, pAllocator, pDeferredOperation);
|
|
if ((vkCreateDeferredOperationKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDeferredOperationKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3 = (uint64_t)(*pDeferredOperation);
|
|
vkStream->putBe64(cgen_var_3);
|
|
vkStream->write(&vkCreateDeferredOperationKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDeferredOperationKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDeferredOperationKHR_VkResult_return, device, pAllocator,
|
|
pDeferredOperation);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyDeferredOperationKHR: {
|
|
android::base::beginTrace("vkDestroyDeferredOperationKHR decode");
|
|
VkDevice device;
|
|
VkDeferredOperationKHR operation;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkDeferredOperationKHR*)&operation, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&operation);
|
|
*readStreamPtrPtr += 8;
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyDeferredOperationKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)operation,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyDeferredOperationKHR(unboxed_device, operation, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyDeferredOperationKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, operation,
|
|
pAllocator);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeferredOperationMaxConcurrencyKHR: {
|
|
android::base::beginTrace("vkGetDeferredOperationMaxConcurrencyKHR decode");
|
|
VkDevice device;
|
|
VkDeferredOperationKHR operation;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkDeferredOperationKHR*)&operation, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&operation);
|
|
*readStreamPtrPtr += 8;
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetDeferredOperationMaxConcurrencyKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)operation);
|
|
}
|
|
uint32_t vkGetDeferredOperationMaxConcurrencyKHR_uint32_t_return = (uint32_t)0;
|
|
vkGetDeferredOperationMaxConcurrencyKHR_uint32_t_return =
|
|
vk->vkGetDeferredOperationMaxConcurrencyKHR(unboxed_device, operation);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetDeferredOperationMaxConcurrencyKHR_uint32_t_return,
|
|
sizeof(uint32_t));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeferredOperationMaxConcurrencyKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDeferredOperationMaxConcurrencyKHR_uint32_t_return, device, operation);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeferredOperationResultKHR: {
|
|
android::base::beginTrace("vkGetDeferredOperationResultKHR decode");
|
|
VkDevice device;
|
|
VkDeferredOperationKHR operation;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkDeferredOperationKHR*)&operation, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&operation);
|
|
*readStreamPtrPtr += 8;
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeferredOperationResultKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)operation);
|
|
}
|
|
VkResult vkGetDeferredOperationResultKHR_VkResult_return = (VkResult)0;
|
|
vkGetDeferredOperationResultKHR_VkResult_return =
|
|
vk->vkGetDeferredOperationResultKHR(unboxed_device, operation);
|
|
if ((vkGetDeferredOperationResultKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetDeferredOperationResultKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetDeferredOperationResultKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeferredOperationResultKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDeferredOperationResultKHR_VkResult_return, device, operation);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDeferredOperationJoinKHR: {
|
|
android::base::beginTrace("vkDeferredOperationJoinKHR decode");
|
|
VkDevice device;
|
|
VkDeferredOperationKHR operation;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkDeferredOperationKHR*)&operation, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&operation);
|
|
*readStreamPtrPtr += 8;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDeferredOperationJoinKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)operation);
|
|
}
|
|
VkResult vkDeferredOperationJoinKHR_VkResult_return = (VkResult)0;
|
|
vkDeferredOperationJoinKHR_VkResult_return =
|
|
vk->vkDeferredOperationJoinKHR(unboxed_device, operation);
|
|
if ((vkDeferredOperationJoinKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkDeferredOperationJoinKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkDeferredOperationJoinKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDeferredOperationJoinKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkDeferredOperationJoinKHR_VkResult_return, device, operation);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_pipeline_executable_properties
|
|
case OP_vkGetPipelineExecutablePropertiesKHR: {
|
|
android::base::beginTrace("vkGetPipelineExecutablePropertiesKHR decode");
|
|
VkDevice device;
|
|
const VkPipelineInfoKHR* pPipelineInfo;
|
|
uint32_t* pExecutableCount;
|
|
VkPipelineExecutablePropertiesKHR* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pPipelineInfo, sizeof(const VkPipelineInfoKHR));
|
|
reservedunmarshal_VkPipelineInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineInfoKHR*)(pPipelineInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pExecutableCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pExecutableCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pExecutableCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pExecutableCount) {
|
|
vkReadStream->alloc((void**)&pExecutableCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pExecutableCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPipelineExecutablePropertiesKHR**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pProperties,
|
|
(*(pExecutableCount)) * sizeof(VkPipelineExecutablePropertiesKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
|
|
reservedunmarshal_VkPipelineExecutablePropertiesKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineExecutablePropertiesKHR*)(pProperties + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPipelineInfo) {
|
|
transform_tohost_VkPipelineInfoKHR(m_state,
|
|
(VkPipelineInfoKHR*)(pPipelineInfo));
|
|
}
|
|
if (pExecutableCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
|
|
transform_tohost_VkPipelineExecutablePropertiesKHR(
|
|
m_state, (VkPipelineExecutablePropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPipelineExecutablePropertiesKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pPipelineInfo,
|
|
(unsigned long long)pExecutableCount, (unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetPipelineExecutablePropertiesKHR_VkResult_return = (VkResult)0;
|
|
vkGetPipelineExecutablePropertiesKHR_VkResult_return =
|
|
vk->vkGetPipelineExecutablePropertiesKHR(unboxed_device, pPipelineInfo,
|
|
pExecutableCount, pProperties);
|
|
if ((vkGetPipelineExecutablePropertiesKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetPipelineExecutablePropertiesKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pExecutableCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pExecutableCount) {
|
|
vkStream->write((uint32_t*)pExecutableCount, sizeof(uint32_t));
|
|
}
|
|
if (pExecutableCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
|
|
transform_fromhost_VkPipelineExecutablePropertiesKHR(
|
|
m_state, (VkPipelineExecutablePropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pExecutableCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
|
|
marshal_VkPipelineExecutablePropertiesKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineExecutablePropertiesKHR*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPipelineExecutablePropertiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPipelineExecutablePropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPipelineExecutablePropertiesKHR_VkResult_return, device, pPipelineInfo,
|
|
pExecutableCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPipelineExecutableStatisticsKHR: {
|
|
android::base::beginTrace("vkGetPipelineExecutableStatisticsKHR decode");
|
|
VkDevice device;
|
|
const VkPipelineExecutableInfoKHR* pExecutableInfo;
|
|
uint32_t* pStatisticCount;
|
|
VkPipelineExecutableStatisticKHR* pStatistics;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pExecutableInfo,
|
|
sizeof(const VkPipelineExecutableInfoKHR));
|
|
reservedunmarshal_VkPipelineExecutableInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineExecutableInfoKHR*)(pExecutableInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pStatisticCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pStatisticCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pStatisticCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pStatisticCount) {
|
|
vkReadStream->alloc((void**)&pStatisticCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pStatisticCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pStatistics;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPipelineExecutableStatisticKHR**)&pStatistics, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pStatistics);
|
|
*readStreamPtrPtr += 8;
|
|
if (pStatistics) {
|
|
vkReadStream->alloc(
|
|
(void**)&pStatistics,
|
|
(*(pStatisticCount)) * sizeof(VkPipelineExecutableStatisticKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
|
|
reservedunmarshal_VkPipelineExecutableStatisticKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineExecutableStatisticKHR*)(pStatistics + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pExecutableInfo) {
|
|
transform_tohost_VkPipelineExecutableInfoKHR(
|
|
m_state, (VkPipelineExecutableInfoKHR*)(pExecutableInfo));
|
|
}
|
|
if (pStatisticCount) {
|
|
if (pStatistics) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
|
|
transform_tohost_VkPipelineExecutableStatisticKHR(
|
|
m_state, (VkPipelineExecutableStatisticKHR*)(pStatistics + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPipelineExecutableStatisticsKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pExecutableInfo,
|
|
(unsigned long long)pStatisticCount, (unsigned long long)pStatistics);
|
|
}
|
|
VkResult vkGetPipelineExecutableStatisticsKHR_VkResult_return = (VkResult)0;
|
|
vkGetPipelineExecutableStatisticsKHR_VkResult_return =
|
|
vk->vkGetPipelineExecutableStatisticsKHR(unboxed_device, pExecutableInfo,
|
|
pStatisticCount, pStatistics);
|
|
if ((vkGetPipelineExecutableStatisticsKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetPipelineExecutableStatisticsKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pStatisticCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pStatisticCount) {
|
|
vkStream->write((uint32_t*)pStatisticCount, sizeof(uint32_t));
|
|
}
|
|
if (pStatisticCount) {
|
|
if (pStatistics) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
|
|
transform_fromhost_VkPipelineExecutableStatisticKHR(
|
|
m_state, (VkPipelineExecutableStatisticKHR*)(pStatistics + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pStatistics;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pStatistics) {
|
|
if (pStatisticCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
|
|
marshal_VkPipelineExecutableStatisticKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineExecutableStatisticKHR*)(pStatistics + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPipelineExecutableStatisticsKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPipelineExecutableStatisticsKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPipelineExecutableStatisticsKHR_VkResult_return, device,
|
|
pExecutableInfo, pStatisticCount, pStatistics);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPipelineExecutableInternalRepresentationsKHR: {
|
|
android::base::beginTrace(
|
|
"vkGetPipelineExecutableInternalRepresentationsKHR decode");
|
|
VkDevice device;
|
|
const VkPipelineExecutableInfoKHR* pExecutableInfo;
|
|
uint32_t* pInternalRepresentationCount;
|
|
VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pExecutableInfo,
|
|
sizeof(const VkPipelineExecutableInfoKHR));
|
|
reservedunmarshal_VkPipelineExecutableInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineExecutableInfoKHR*)(pExecutableInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pInternalRepresentationCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pInternalRepresentationCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pInternalRepresentationCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pInternalRepresentationCount) {
|
|
vkReadStream->alloc((void**)&pInternalRepresentationCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pInternalRepresentationCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pInternalRepresentations;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPipelineExecutableInternalRepresentationKHR**)&pInternalRepresentations,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pInternalRepresentations);
|
|
*readStreamPtrPtr += 8;
|
|
if (pInternalRepresentations) {
|
|
vkReadStream->alloc((void**)&pInternalRepresentations,
|
|
(*(pInternalRepresentationCount)) *
|
|
sizeof(VkPipelineExecutableInternalRepresentationKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
|
|
reservedunmarshal_VkPipelineExecutableInternalRepresentationKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations +
|
|
i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pExecutableInfo) {
|
|
transform_tohost_VkPipelineExecutableInfoKHR(
|
|
m_state, (VkPipelineExecutableInfoKHR*)(pExecutableInfo));
|
|
}
|
|
if (pInternalRepresentationCount) {
|
|
if (pInternalRepresentations) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
|
|
transform_tohost_VkPipelineExecutableInternalRepresentationKHR(
|
|
m_state,
|
|
(VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPipelineExecutableInternalRepresentationsKHR "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pExecutableInfo,
|
|
(unsigned long long)pInternalRepresentationCount,
|
|
(unsigned long long)pInternalRepresentations);
|
|
}
|
|
VkResult vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return =
|
|
(VkResult)0;
|
|
vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return =
|
|
vk->vkGetPipelineExecutableInternalRepresentationsKHR(
|
|
unboxed_device, pExecutableInfo, pInternalRepresentationCount,
|
|
pInternalRepresentations);
|
|
if ((vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pInternalRepresentationCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pInternalRepresentationCount) {
|
|
vkStream->write((uint32_t*)pInternalRepresentationCount, sizeof(uint32_t));
|
|
}
|
|
if (pInternalRepresentationCount) {
|
|
if (pInternalRepresentations) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
|
|
transform_fromhost_VkPipelineExecutableInternalRepresentationKHR(
|
|
m_state,
|
|
(VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pInternalRepresentations;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pInternalRepresentations) {
|
|
if (pInternalRepresentationCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
|
|
marshal_VkPipelineExecutableInternalRepresentationKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations +
|
|
i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPipelineExecutableInternalRepresentationsKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return, device,
|
|
pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_shader_integer_dot_product
|
|
#endif
|
|
#ifdef VK_KHR_pipeline_library
|
|
#endif
|
|
#ifdef VK_KHR_shader_non_semantic_info
|
|
#endif
|
|
#ifdef VK_KHR_present_id
|
|
#endif
|
|
#ifdef VK_KHR_video_encode_queue
|
|
case OP_vkCmdEncodeVideoKHR: {
|
|
android::base::beginTrace("vkCmdEncodeVideoKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkVideoEncodeInfoKHR* pEncodeInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pEncodeInfo, sizeof(const VkVideoEncodeInfoKHR));
|
|
reservedunmarshal_VkVideoEncodeInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVideoEncodeInfoKHR*)(pEncodeInfo),
|
|
readStreamPtrPtr);
|
|
if (pEncodeInfo) {
|
|
transform_tohost_VkVideoEncodeInfoKHR(m_state,
|
|
(VkVideoEncodeInfoKHR*)(pEncodeInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdEncodeVideoKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pEncodeInfo);
|
|
}
|
|
vk->vkCmdEncodeVideoKHR(unboxed_commandBuffer, pEncodeInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEncodeVideoKHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, pEncodeInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_synchronization2
|
|
case OP_vkCmdSetEvent2KHR: {
|
|
android::base::beginTrace("vkCmdSetEvent2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkEvent event;
|
|
const VkDependencyInfoKHR* pDependencyInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_1));
|
|
vkReadStream->alloc((void**)&pDependencyInfo, sizeof(const VkDependencyInfoKHR));
|
|
reservedunmarshal_VkDependencyInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDependencyInfoKHR*)(pDependencyInfo),
|
|
readStreamPtrPtr);
|
|
if (pDependencyInfo) {
|
|
transform_tohost_VkDependencyInfoKHR(m_state,
|
|
(VkDependencyInfoKHR*)(pDependencyInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetEvent2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)event,
|
|
(unsigned long long)pDependencyInfo);
|
|
}
|
|
vk->vkCmdSetEvent2KHR(unboxed_commandBuffer, event, pDependencyInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetEvent2KHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, event,
|
|
pDependencyInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdResetEvent2KHR: {
|
|
android::base::beginTrace("vkCmdResetEvent2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkEvent event;
|
|
VkPipelineStageFlags2KHR stageMask;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_1));
|
|
memcpy((VkPipelineStageFlags2KHR*)&stageMask, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlags2KHR));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags2KHR);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdResetEvent2KHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)event,
|
|
(unsigned long long)stageMask);
|
|
}
|
|
vk->vkCmdResetEvent2KHR(unboxed_commandBuffer, event, stageMask);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdResetEvent2KHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, event,
|
|
stageMask);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdWaitEvents2KHR: {
|
|
android::base::beginTrace("vkCmdWaitEvents2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t eventCount;
|
|
const VkEvent* pEvents;
|
|
const VkDependencyInfoKHR* pDependencyInfos;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&eventCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pEvents, ((eventCount)) * sizeof(const VkEvent));
|
|
if (((eventCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((eventCount));
|
|
for (uint32_t k = 0; k < ((eventCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkEvent*)pEvents) + k) = (VkEvent)unbox_VkEvent((VkEvent)tmpval);
|
|
}
|
|
}
|
|
vkReadStream->alloc((void**)&pDependencyInfos,
|
|
((eventCount)) * sizeof(const VkDependencyInfoKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
|
|
reservedunmarshal_VkDependencyInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDependencyInfoKHR*)(pDependencyInfos + i), readStreamPtrPtr);
|
|
}
|
|
if (pDependencyInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
|
|
transform_tohost_VkDependencyInfoKHR(
|
|
m_state, (VkDependencyInfoKHR*)(pDependencyInfos + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdWaitEvents2KHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)eventCount, (unsigned long long)pEvents,
|
|
(unsigned long long)pDependencyInfos);
|
|
}
|
|
vk->vkCmdWaitEvents2KHR(unboxed_commandBuffer, eventCount, pEvents,
|
|
pDependencyInfos);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdWaitEvents2KHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, eventCount,
|
|
pEvents, pDependencyInfos);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdPipelineBarrier2KHR: {
|
|
android::base::beginTrace("vkCmdPipelineBarrier2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkDependencyInfoKHR* pDependencyInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pDependencyInfo, sizeof(const VkDependencyInfoKHR));
|
|
reservedunmarshal_VkDependencyInfoKHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDependencyInfoKHR*)(pDependencyInfo),
|
|
readStreamPtrPtr);
|
|
if (pDependencyInfo) {
|
|
transform_tohost_VkDependencyInfoKHR(m_state,
|
|
(VkDependencyInfoKHR*)(pDependencyInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdPipelineBarrier2KHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pDependencyInfo);
|
|
}
|
|
vk->vkCmdPipelineBarrier2KHR(unboxed_commandBuffer, pDependencyInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdPipelineBarrier2KHR(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, pDependencyInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdWriteTimestamp2KHR: {
|
|
android::base::beginTrace("vkCmdWriteTimestamp2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineStageFlags2KHR stage;
|
|
VkQueryPool queryPool;
|
|
uint32_t query;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkPipelineStageFlags2KHR*)&stage, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlags2KHR));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags2KHR);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdWriteTimestamp2KHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)stage,
|
|
(unsigned long long)queryPool, (unsigned long long)query);
|
|
}
|
|
vk->vkCmdWriteTimestamp2KHR(unboxed_commandBuffer, stage, queryPool, query);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdWriteTimestamp2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, stage,
|
|
queryPool, query);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueSubmit2KHR: {
|
|
android::base::beginTrace("vkQueueSubmit2KHR decode");
|
|
VkQueue queue;
|
|
uint32_t submitCount;
|
|
const VkSubmitInfo2KHR* pSubmits;
|
|
VkFence fence;
|
|
// Begin non wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
auto unboxed_queue = unbox_VkQueue(queue);
|
|
auto vk = dispatch_VkQueue(queue);
|
|
// End manual dispatchable handle unboxing for queue;
|
|
memcpy((uint32_t*)&submitCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pSubmits,
|
|
((submitCount)) * sizeof(const VkSubmitInfo2KHR));
|
|
for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
|
|
reservedunmarshal_VkSubmitInfo2KHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubmitInfo2KHR*)(pSubmits + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFence*)&fence = (VkFence)unbox_VkFence((VkFence)(*&cgen_var_1));
|
|
if (pSubmits) {
|
|
for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
|
|
transform_tohost_VkSubmitInfo2KHR(m_state,
|
|
(VkSubmitInfo2KHR*)(pSubmits + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkQueueSubmit2KHR 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)submitCount,
|
|
(unsigned long long)pSubmits, (unsigned long long)fence);
|
|
}
|
|
VkResult vkQueueSubmit2KHR_VkResult_return = (VkResult)0;
|
|
vkQueueSubmit2KHR_VkResult_return =
|
|
vk->vkQueueSubmit2KHR(unboxed_queue, submitCount, pSubmits, fence);
|
|
if ((vkQueueSubmit2KHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkQueueSubmit2KHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkQueueSubmit2KHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueSubmit2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkQueueSubmit2KHR_VkResult_return, queue, submitCount, pSubmits, fence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdWriteBufferMarker2AMD: {
|
|
android::base::beginTrace("vkCmdWriteBufferMarker2AMD decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineStageFlags2KHR stage;
|
|
VkBuffer dstBuffer;
|
|
VkDeviceSize dstOffset;
|
|
uint32_t marker;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkPipelineStageFlags2KHR*)&stage, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlags2KHR));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags2KHR);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&dstOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&marker, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdWriteBufferMarker2AMD 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)stage,
|
|
(unsigned long long)dstBuffer, (unsigned long long)dstOffset,
|
|
(unsigned long long)marker);
|
|
}
|
|
vk->vkCmdWriteBufferMarker2AMD(unboxed_commandBuffer, stage, dstBuffer, dstOffset,
|
|
marker);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdWriteBufferMarker2AMD(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, stage,
|
|
dstBuffer, dstOffset, marker);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetQueueCheckpointData2NV: {
|
|
android::base::beginTrace("vkGetQueueCheckpointData2NV decode");
|
|
VkQueue queue;
|
|
uint32_t* pCheckpointDataCount;
|
|
VkCheckpointData2NV* pCheckpointData;
|
|
// Begin non wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
auto unboxed_queue = unbox_VkQueue(queue);
|
|
auto vk = dispatch_VkQueue(queue);
|
|
// End manual dispatchable handle unboxing for queue;
|
|
// Begin manual dispatchable handle unboxing for pCheckpointDataCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pCheckpointDataCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCheckpointDataCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCheckpointDataCount) {
|
|
vkReadStream->alloc((void**)&pCheckpointDataCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pCheckpointDataCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pCheckpointData;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkCheckpointData2NV**)&pCheckpointData, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCheckpointData);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCheckpointData) {
|
|
vkReadStream->alloc((void**)&pCheckpointData,
|
|
(*(pCheckpointDataCount)) * sizeof(VkCheckpointData2NV));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
|
|
reservedunmarshal_VkCheckpointData2NV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCheckpointData2NV*)(pCheckpointData + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pCheckpointDataCount) {
|
|
if (pCheckpointData) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
|
|
transform_tohost_VkCheckpointData2NV(
|
|
m_state, (VkCheckpointData2NV*)(pCheckpointData + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetQueueCheckpointData2NV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue,
|
|
(unsigned long long)pCheckpointDataCount,
|
|
(unsigned long long)pCheckpointData);
|
|
}
|
|
vk->vkGetQueueCheckpointData2NV(unboxed_queue, pCheckpointDataCount,
|
|
pCheckpointData);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pCheckpointDataCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pCheckpointDataCount) {
|
|
vkStream->write((uint32_t*)pCheckpointDataCount, sizeof(uint32_t));
|
|
}
|
|
if (pCheckpointDataCount) {
|
|
if (pCheckpointData) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
|
|
transform_fromhost_VkCheckpointData2NV(
|
|
m_state, (VkCheckpointData2NV*)(pCheckpointData + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pCheckpointData;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pCheckpointData) {
|
|
if (pCheckpointDataCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
|
|
marshal_VkCheckpointData2NV(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCheckpointData2NV*)(pCheckpointData + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetQueueCheckpointData2NV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue,
|
|
pCheckpointDataCount, pCheckpointData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_shader_subgroup_uniform_control_flow
|
|
#endif
|
|
#ifdef VK_KHR_zero_initialize_workgroup_memory
|
|
#endif
|
|
#ifdef VK_KHR_workgroup_memory_explicit_layout
|
|
#endif
|
|
#ifdef VK_KHR_copy_commands2
|
|
case OP_vkCmdCopyBuffer2KHR: {
|
|
android::base::beginTrace("vkCmdCopyBuffer2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCopyBufferInfo2KHR* pCopyBufferInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pCopyBufferInfo, sizeof(const VkCopyBufferInfo2KHR));
|
|
reservedunmarshal_VkCopyBufferInfo2KHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyBufferInfo2KHR*)(pCopyBufferInfo),
|
|
readStreamPtrPtr);
|
|
if (pCopyBufferInfo) {
|
|
transform_tohost_VkCopyBufferInfo2KHR(m_state,
|
|
(VkCopyBufferInfo2KHR*)(pCopyBufferInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdCopyBuffer2KHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pCopyBufferInfo);
|
|
}
|
|
vk->vkCmdCopyBuffer2KHR(unboxed_commandBuffer, pCopyBufferInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyBuffer2KHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer,
|
|
pCopyBufferInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyImage2KHR: {
|
|
android::base::beginTrace("vkCmdCopyImage2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCopyImageInfo2KHR* pCopyImageInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pCopyImageInfo, sizeof(const VkCopyImageInfo2KHR));
|
|
reservedunmarshal_VkCopyImageInfo2KHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyImageInfo2KHR*)(pCopyImageInfo),
|
|
readStreamPtrPtr);
|
|
if (pCopyImageInfo) {
|
|
transform_tohost_VkCopyImageInfo2KHR(m_state,
|
|
(VkCopyImageInfo2KHR*)(pCopyImageInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdCopyImage2KHR 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer, (unsigned long long)pCopyImageInfo);
|
|
}
|
|
vk->vkCmdCopyImage2KHR(unboxed_commandBuffer, pCopyImageInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyImage2KHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, pCopyImageInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyBufferToImage2KHR: {
|
|
android::base::beginTrace("vkCmdCopyBufferToImage2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pCopyBufferToImageInfo,
|
|
sizeof(const VkCopyBufferToImageInfo2KHR));
|
|
reservedunmarshal_VkCopyBufferToImageInfo2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyBufferToImageInfo2KHR*)(pCopyBufferToImageInfo), readStreamPtrPtr);
|
|
if (pCopyBufferToImageInfo) {
|
|
transform_tohost_VkCopyBufferToImageInfo2KHR(
|
|
m_state, (VkCopyBufferToImageInfo2KHR*)(pCopyBufferToImageInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdCopyBufferToImage2KHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pCopyBufferToImageInfo);
|
|
}
|
|
vk->vkCmdCopyBufferToImage2KHR(unboxed_commandBuffer, pCopyBufferToImageInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyBufferToImage2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pCopyBufferToImageInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyImageToBuffer2KHR: {
|
|
android::base::beginTrace("vkCmdCopyImageToBuffer2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pCopyImageToBufferInfo,
|
|
sizeof(const VkCopyImageToBufferInfo2KHR));
|
|
reservedunmarshal_VkCopyImageToBufferInfo2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyImageToBufferInfo2KHR*)(pCopyImageToBufferInfo), readStreamPtrPtr);
|
|
if (pCopyImageToBufferInfo) {
|
|
transform_tohost_VkCopyImageToBufferInfo2KHR(
|
|
m_state, (VkCopyImageToBufferInfo2KHR*)(pCopyImageToBufferInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdCopyImageToBuffer2KHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pCopyImageToBufferInfo);
|
|
}
|
|
vk->vkCmdCopyImageToBuffer2KHR(unboxed_commandBuffer, pCopyImageToBufferInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyImageToBuffer2KHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pCopyImageToBufferInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBlitImage2KHR: {
|
|
android::base::beginTrace("vkCmdBlitImage2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkBlitImageInfo2KHR* pBlitImageInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pBlitImageInfo, sizeof(const VkBlitImageInfo2KHR));
|
|
reservedunmarshal_VkBlitImageInfo2KHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBlitImageInfo2KHR*)(pBlitImageInfo),
|
|
readStreamPtrPtr);
|
|
if (pBlitImageInfo) {
|
|
transform_tohost_VkBlitImageInfo2KHR(m_state,
|
|
(VkBlitImageInfo2KHR*)(pBlitImageInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdBlitImage2KHR 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer, (unsigned long long)pBlitImageInfo);
|
|
}
|
|
vk->vkCmdBlitImage2KHR(unboxed_commandBuffer, pBlitImageInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBlitImage2KHR(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, pBlitImageInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdResolveImage2KHR: {
|
|
android::base::beginTrace("vkCmdResolveImage2KHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkResolveImageInfo2KHR* pResolveImageInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pResolveImageInfo,
|
|
sizeof(const VkResolveImageInfo2KHR));
|
|
reservedunmarshal_VkResolveImageInfo2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkResolveImageInfo2KHR*)(pResolveImageInfo), readStreamPtrPtr);
|
|
if (pResolveImageInfo) {
|
|
transform_tohost_VkResolveImageInfo2KHR(
|
|
m_state, (VkResolveImageInfo2KHR*)(pResolveImageInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdResolveImage2KHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pResolveImageInfo);
|
|
}
|
|
vk->vkCmdResolveImage2KHR(unboxed_commandBuffer, pResolveImageInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdResolveImage2KHR(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, pResolveImageInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_format_feature_flags2
|
|
#endif
|
|
#ifdef VK_KHR_maintenance4
|
|
case OP_vkGetDeviceBufferMemoryRequirementsKHR: {
|
|
android::base::beginTrace("vkGetDeviceBufferMemoryRequirementsKHR decode");
|
|
VkDevice device;
|
|
const VkDeviceBufferMemoryRequirementsKHR* pInfo;
|
|
VkMemoryRequirements2* pMemoryRequirements;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkDeviceBufferMemoryRequirementsKHR));
|
|
reservedunmarshal_VkDeviceBufferMemoryRequirementsKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceBufferMemoryRequirementsKHR*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements2));
|
|
reservedunmarshal_VkMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkDeviceBufferMemoryRequirementsKHR(
|
|
m_state, (VkDeviceBufferMemoryRequirementsKHR*)(pInfo));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceBufferMemoryRequirementsKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
vk->vkGetDeviceBufferMemoryRequirementsKHR(unboxed_device, pInfo,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceBufferMemoryRequirementsKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceImageMemoryRequirementsKHR: {
|
|
android::base::beginTrace("vkGetDeviceImageMemoryRequirementsKHR decode");
|
|
VkDevice device;
|
|
const VkDeviceImageMemoryRequirementsKHR* pInfo;
|
|
VkMemoryRequirements2* pMemoryRequirements;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkDeviceImageMemoryRequirementsKHR));
|
|
reservedunmarshal_VkDeviceImageMemoryRequirementsKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceImageMemoryRequirementsKHR*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements2));
|
|
reservedunmarshal_VkMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkDeviceImageMemoryRequirementsKHR(
|
|
m_state, (VkDeviceImageMemoryRequirementsKHR*)(pInfo));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceImageMemoryRequirementsKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
vk->vkGetDeviceImageMemoryRequirementsKHR(unboxed_device, pInfo,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceImageMemoryRequirementsKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceImageSparseMemoryRequirementsKHR: {
|
|
android::base::beginTrace("vkGetDeviceImageSparseMemoryRequirementsKHR decode");
|
|
VkDevice device;
|
|
const VkDeviceImageMemoryRequirementsKHR* pInfo;
|
|
uint32_t* pSparseMemoryRequirementCount;
|
|
VkSparseImageMemoryRequirements2* pSparseMemoryRequirements;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkDeviceImageMemoryRequirementsKHR));
|
|
reservedunmarshal_VkDeviceImageMemoryRequirementsKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceImageMemoryRequirementsKHR*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pSparseMemoryRequirementCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pSparseMemoryRequirementCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSparseMemoryRequirementCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSparseMemoryRequirementCount) {
|
|
vkReadStream->alloc((void**)&pSparseMemoryRequirementCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pSparseMemoryRequirementCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSparseMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSparseImageMemoryRequirements2**)&pSparseMemoryRequirements,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSparseMemoryRequirements);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSparseMemoryRequirements) {
|
|
vkReadStream->alloc((void**)&pSparseMemoryRequirements,
|
|
(*(pSparseMemoryRequirementCount)) *
|
|
sizeof(VkSparseImageMemoryRequirements2));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
|
|
reservedunmarshal_VkSparseImageMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pInfo) {
|
|
transform_tohost_VkDeviceImageMemoryRequirementsKHR(
|
|
m_state, (VkDeviceImageMemoryRequirementsKHR*)(pInfo));
|
|
}
|
|
if (pSparseMemoryRequirementCount) {
|
|
if (pSparseMemoryRequirements) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
transform_tohost_VkSparseImageMemoryRequirements2(
|
|
m_state,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceImageSparseMemoryRequirementsKHR 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pSparseMemoryRequirementCount,
|
|
(unsigned long long)pSparseMemoryRequirements);
|
|
}
|
|
vk->vkGetDeviceImageSparseMemoryRequirementsKHR(unboxed_device, pInfo,
|
|
pSparseMemoryRequirementCount,
|
|
pSparseMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pSparseMemoryRequirementCount) {
|
|
vkStream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
|
|
}
|
|
if (pSparseMemoryRequirementCount) {
|
|
if (pSparseMemoryRequirements) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
transform_fromhost_VkSparseImageMemoryRequirements2(
|
|
m_state,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pSparseMemoryRequirements) {
|
|
if (pSparseMemoryRequirementCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount));
|
|
++i) {
|
|
marshal_VkSparseImageMemoryRequirements2(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceImageSparseMemoryRequirementsKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pSparseMemoryRequirementCount, pSparseMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_ANDROID_native_buffer
|
|
case OP_vkGetSwapchainGrallocUsageANDROID: {
|
|
android::base::beginTrace("vkGetSwapchainGrallocUsageANDROID decode");
|
|
VkDevice device;
|
|
VkFormat format;
|
|
VkImageUsageFlags imageUsage;
|
|
int* grallocUsage;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
memcpy((VkFormat*)&format, *readStreamPtrPtr, sizeof(VkFormat));
|
|
*readStreamPtrPtr += sizeof(VkFormat);
|
|
memcpy((VkImageUsageFlags*)&imageUsage, *readStreamPtrPtr,
|
|
sizeof(VkImageUsageFlags));
|
|
*readStreamPtrPtr += sizeof(VkImageUsageFlags);
|
|
// Begin manual dispatchable handle unboxing for grallocUsage;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&grallocUsage, sizeof(int));
|
|
memcpy((int*)grallocUsage, *readStreamPtrPtr, sizeof(int));
|
|
*readStreamPtrPtr += sizeof(int);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetSwapchainGrallocUsageANDROID 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)format,
|
|
(unsigned long long)imageUsage, (unsigned long long)grallocUsage);
|
|
}
|
|
VkResult vkGetSwapchainGrallocUsageANDROID_VkResult_return = (VkResult)0;
|
|
vkGetSwapchainGrallocUsageANDROID_VkResult_return =
|
|
m_state->on_vkGetSwapchainGrallocUsageANDROID(&m_pool, device, format,
|
|
imageUsage, grallocUsage);
|
|
if ((vkGetSwapchainGrallocUsageANDROID_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetSwapchainGrallocUsageANDROID_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((int*)grallocUsage, sizeof(int));
|
|
vkStream->write(&vkGetSwapchainGrallocUsageANDROID_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetSwapchainGrallocUsageANDROID(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetSwapchainGrallocUsageANDROID_VkResult_return, device, format,
|
|
imageUsage, grallocUsage);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkAcquireImageANDROID: {
|
|
android::base::beginTrace("vkAcquireImageANDROID decode");
|
|
VkDevice device;
|
|
VkImage image;
|
|
int nativeFenceFd;
|
|
VkSemaphore semaphore;
|
|
VkFence fence;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
memcpy((int*)&nativeFenceFd, *readStreamPtrPtr, sizeof(int));
|
|
*readStreamPtrPtr += sizeof(int);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSemaphore*)&semaphore =
|
|
(VkSemaphore)unbox_VkSemaphore((VkSemaphore)(*&cgen_var_2));
|
|
uint64_t cgen_var_3;
|
|
memcpy((uint64_t*)&cgen_var_3, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFence*)&fence = (VkFence)unbox_VkFence((VkFence)(*&cgen_var_3));
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAcquireImageANDROID 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)image,
|
|
(unsigned long long)nativeFenceFd, (unsigned long long)semaphore,
|
|
(unsigned long long)fence);
|
|
}
|
|
VkResult vkAcquireImageANDROID_VkResult_return = (VkResult)0;
|
|
vkAcquireImageANDROID_VkResult_return = m_state->on_vkAcquireImageANDROID(
|
|
&m_pool, device, image, nativeFenceFd, semaphore, fence);
|
|
if ((vkAcquireImageANDROID_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAcquireImageANDROID_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkAcquireImageANDROID_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAcquireImageANDROID(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAcquireImageANDROID_VkResult_return, device, image, nativeFenceFd,
|
|
semaphore, fence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueSignalReleaseImageANDROID: {
|
|
android::base::beginTrace("vkQueueSignalReleaseImageANDROID decode");
|
|
VkQueue queue;
|
|
uint32_t waitSemaphoreCount;
|
|
const VkSemaphore* pWaitSemaphores;
|
|
VkImage image;
|
|
int* pNativeFenceFd;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&waitSemaphoreCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSemaphore**)&pWaitSemaphores, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pWaitSemaphores);
|
|
*readStreamPtrPtr += 8;
|
|
if (pWaitSemaphores) {
|
|
vkReadStream->alloc((void**)&pWaitSemaphores,
|
|
((waitSemaphoreCount)) * sizeof(const VkSemaphore));
|
|
if (((waitSemaphoreCount))) {
|
|
uint8_t* cgen_var_1_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((waitSemaphoreCount));
|
|
for (uint32_t k = 0; k < ((waitSemaphoreCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkSemaphore*)pWaitSemaphores) + k) =
|
|
(VkSemaphore)unbox_VkSemaphore((VkSemaphore)tmpval);
|
|
}
|
|
}
|
|
}
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_2));
|
|
// Begin manual dispatchable handle unboxing for pNativeFenceFd;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pNativeFenceFd, sizeof(int));
|
|
memcpy((int*)pNativeFenceFd, *readStreamPtrPtr, sizeof(int));
|
|
*readStreamPtrPtr += sizeof(int);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkQueueSignalReleaseImageANDROID 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue,
|
|
(unsigned long long)waitSemaphoreCount,
|
|
(unsigned long long)pWaitSemaphores, (unsigned long long)image,
|
|
(unsigned long long)pNativeFenceFd);
|
|
}
|
|
VkResult vkQueueSignalReleaseImageANDROID_VkResult_return = (VkResult)0;
|
|
vkQueueSignalReleaseImageANDROID_VkResult_return =
|
|
m_state->on_vkQueueSignalReleaseImageANDROID(
|
|
&m_pool, queue, waitSemaphoreCount, pWaitSemaphores, image, pNativeFenceFd);
|
|
if ((vkQueueSignalReleaseImageANDROID_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkQueueSignalReleaseImageANDROID_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((int*)pNativeFenceFd, sizeof(int));
|
|
vkStream->write(&vkQueueSignalReleaseImageANDROID_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueSignalReleaseImageANDROID(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkQueueSignalReleaseImageANDROID_VkResult_return, queue, waitSemaphoreCount,
|
|
pWaitSemaphores, image, pNativeFenceFd);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_debug_report
|
|
case OP_vkCreateDebugReportCallbackEXT: {
|
|
android::base::beginTrace("vkCreateDebugReportCallbackEXT decode");
|
|
VkInstance instance;
|
|
const VkDebugReportCallbackCreateInfoEXT* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDebugReportCallbackEXT* pCallback;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkDebugReportCallbackCreateInfoEXT));
|
|
reservedunmarshal_VkDebugReportCallbackCreateInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugReportCallbackCreateInfoEXT*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pCallback;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCallback, sizeof(VkDebugReportCallbackEXT));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDebugReportCallbackEXT*)pCallback =
|
|
(VkDebugReportCallbackEXT)(VkDebugReportCallbackEXT)((
|
|
VkDebugReportCallbackEXT)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDebugReportCallbackCreateInfoEXT(
|
|
m_state, (VkDebugReportCallbackCreateInfoEXT*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateDebugReportCallbackEXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pCallback);
|
|
}
|
|
VkResult vkCreateDebugReportCallbackEXT_VkResult_return = (VkResult)0;
|
|
vkCreateDebugReportCallbackEXT_VkResult_return = vk->vkCreateDebugReportCallbackEXT(
|
|
unboxed_instance, pCreateInfo, pAllocator, pCallback);
|
|
if ((vkCreateDebugReportCallbackEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDebugReportCallbackEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pCallback;
|
|
if (vkCreateDebugReportCallbackEXT_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkDebugReportCallbackEXT),
|
|
"handle map overwrite requires VkDebugReportCallbackEXT to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDebugReportCallbackEXT(
|
|
(VkDebugReportCallbackEXT*)pCallback, 1);
|
|
vkStream->write((VkDebugReportCallbackEXT*)pCallback, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pCallback;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateDebugReportCallbackEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDebugReportCallbackEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDebugReportCallbackEXT_VkResult_return, instance, pCreateInfo,
|
|
pAllocator, pCallback);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyDebugReportCallbackEXT: {
|
|
android::base::beginTrace("vkDestroyDebugReportCallbackEXT decode");
|
|
VkInstance instance;
|
|
VkDebugReportCallbackEXT callback;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
// Begin manual non dispatchable handle destroy unboxing for callback;
|
|
VkDebugReportCallbackEXT boxed_callback_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDebugReportCallbackEXT*)&callback =
|
|
(VkDebugReportCallbackEXT)(VkDebugReportCallbackEXT)((
|
|
VkDebugReportCallbackEXT)(*&cgen_var_1));
|
|
boxed_callback_preserve = callback;
|
|
callback = unbox_VkDebugReportCallbackEXT(callback);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkDestroyDebugReportCallbackEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)callback,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyDebugReportCallbackEXT(unboxed_instance, callback, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyDebugReportCallbackEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, instance,
|
|
boxed_callback_preserve, pAllocator);
|
|
}
|
|
delete_VkDebugReportCallbackEXT(boxed_callback_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDebugReportMessageEXT: {
|
|
android::base::beginTrace("vkDebugReportMessageEXT decode");
|
|
VkInstance instance;
|
|
VkDebugReportFlagsEXT flags;
|
|
VkDebugReportObjectTypeEXT objectType;
|
|
uint64_t object;
|
|
size_t location;
|
|
int32_t messageCode;
|
|
const char* pLayerPrefix;
|
|
const char* pMessage;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
memcpy((VkDebugReportFlagsEXT*)&flags, *readStreamPtrPtr,
|
|
sizeof(VkDebugReportFlagsEXT));
|
|
*readStreamPtrPtr += sizeof(VkDebugReportFlagsEXT);
|
|
memcpy((VkDebugReportObjectTypeEXT*)&objectType, *readStreamPtrPtr,
|
|
sizeof(VkDebugReportObjectTypeEXT));
|
|
*readStreamPtrPtr += sizeof(VkDebugReportObjectTypeEXT);
|
|
memcpy((uint64_t*)&object, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
memcpy((size_t*)&location, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&location);
|
|
*readStreamPtrPtr += 8;
|
|
memcpy((int32_t*)&messageCode, *readStreamPtrPtr, sizeof(int32_t));
|
|
*readStreamPtrPtr += sizeof(int32_t);
|
|
vkReadStream->loadStringInPlaceWithStreamPtr((char**)&pLayerPrefix,
|
|
readStreamPtrPtr);
|
|
vkReadStream->loadStringInPlaceWithStreamPtr((char**)&pMessage, readStreamPtrPtr);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDebugReportMessageEXT 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)flags,
|
|
(unsigned long long)objectType, (unsigned long long)object,
|
|
(unsigned long long)location, (unsigned long long)messageCode,
|
|
(unsigned long long)pLayerPrefix, (unsigned long long)pMessage);
|
|
}
|
|
vk->vkDebugReportMessageEXT(unboxed_instance, flags, objectType, object, location,
|
|
messageCode, pLayerPrefix, pMessage);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDebugReportMessageEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, instance, flags,
|
|
objectType, object, location, messageCode, pLayerPrefix, pMessage);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_glsl_shader
|
|
#endif
|
|
#ifdef VK_EXT_depth_range_unrestricted
|
|
#endif
|
|
#ifdef VK_IMG_filter_cubic
|
|
#endif
|
|
#ifdef VK_AMD_rasterization_order
|
|
#endif
|
|
#ifdef VK_AMD_shader_trinary_minmax
|
|
#endif
|
|
#ifdef VK_AMD_shader_explicit_vertex_parameter
|
|
#endif
|
|
#ifdef VK_EXT_debug_marker
|
|
case OP_vkDebugMarkerSetObjectTagEXT: {
|
|
android::base::beginTrace("vkDebugMarkerSetObjectTagEXT decode");
|
|
VkDevice device;
|
|
const VkDebugMarkerObjectTagInfoEXT* pTagInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pTagInfo, sizeof(const VkDebugMarkerObjectTagInfoEXT));
|
|
reservedunmarshal_VkDebugMarkerObjectTagInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugMarkerObjectTagInfoEXT*)(pTagInfo), readStreamPtrPtr);
|
|
if (pTagInfo) {
|
|
transform_tohost_VkDebugMarkerObjectTagInfoEXT(
|
|
m_state, (VkDebugMarkerObjectTagInfoEXT*)(pTagInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDebugMarkerSetObjectTagEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pTagInfo);
|
|
}
|
|
VkResult vkDebugMarkerSetObjectTagEXT_VkResult_return = (VkResult)0;
|
|
vkDebugMarkerSetObjectTagEXT_VkResult_return =
|
|
vk->vkDebugMarkerSetObjectTagEXT(unboxed_device, pTagInfo);
|
|
if ((vkDebugMarkerSetObjectTagEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkDebugMarkerSetObjectTagEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkDebugMarkerSetObjectTagEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDebugMarkerSetObjectTagEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkDebugMarkerSetObjectTagEXT_VkResult_return, device, pTagInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDebugMarkerSetObjectNameEXT: {
|
|
android::base::beginTrace("vkDebugMarkerSetObjectNameEXT decode");
|
|
VkDevice device;
|
|
const VkDebugMarkerObjectNameInfoEXT* pNameInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pNameInfo,
|
|
sizeof(const VkDebugMarkerObjectNameInfoEXT));
|
|
reservedunmarshal_VkDebugMarkerObjectNameInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugMarkerObjectNameInfoEXT*)(pNameInfo), readStreamPtrPtr);
|
|
if (pNameInfo) {
|
|
transform_tohost_VkDebugMarkerObjectNameInfoEXT(
|
|
m_state, (VkDebugMarkerObjectNameInfoEXT*)(pNameInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDebugMarkerSetObjectNameEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pNameInfo);
|
|
}
|
|
VkResult vkDebugMarkerSetObjectNameEXT_VkResult_return = (VkResult)0;
|
|
vkDebugMarkerSetObjectNameEXT_VkResult_return =
|
|
vk->vkDebugMarkerSetObjectNameEXT(unboxed_device, pNameInfo);
|
|
if ((vkDebugMarkerSetObjectNameEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkDebugMarkerSetObjectNameEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkDebugMarkerSetObjectNameEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDebugMarkerSetObjectNameEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkDebugMarkerSetObjectNameEXT_VkResult_return, device, pNameInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDebugMarkerBeginEXT: {
|
|
android::base::beginTrace("vkCmdDebugMarkerBeginEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pMarkerInfo, sizeof(const VkDebugMarkerMarkerInfoEXT));
|
|
reservedunmarshal_VkDebugMarkerMarkerInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugMarkerMarkerInfoEXT*)(pMarkerInfo), readStreamPtrPtr);
|
|
if (pMarkerInfo) {
|
|
transform_tohost_VkDebugMarkerMarkerInfoEXT(
|
|
m_state, (VkDebugMarkerMarkerInfoEXT*)(pMarkerInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdDebugMarkerBeginEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pMarkerInfo);
|
|
}
|
|
vk->vkCmdDebugMarkerBeginEXT(unboxed_commandBuffer, pMarkerInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDebugMarkerBeginEXT(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, pMarkerInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDebugMarkerEndEXT: {
|
|
android::base::beginTrace("vkCmdDebugMarkerEndEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdDebugMarkerEndEXT 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer);
|
|
}
|
|
vk->vkCmdDebugMarkerEndEXT(unboxed_commandBuffer);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDebugMarkerEndEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDebugMarkerInsertEXT: {
|
|
android::base::beginTrace("vkCmdDebugMarkerInsertEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pMarkerInfo, sizeof(const VkDebugMarkerMarkerInfoEXT));
|
|
reservedunmarshal_VkDebugMarkerMarkerInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugMarkerMarkerInfoEXT*)(pMarkerInfo), readStreamPtrPtr);
|
|
if (pMarkerInfo) {
|
|
transform_tohost_VkDebugMarkerMarkerInfoEXT(
|
|
m_state, (VkDebugMarkerMarkerInfoEXT*)(pMarkerInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdDebugMarkerInsertEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pMarkerInfo);
|
|
}
|
|
vk->vkCmdDebugMarkerInsertEXT(unboxed_commandBuffer, pMarkerInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDebugMarkerInsertEXT(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, pMarkerInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_AMD_gcn_shader
|
|
#endif
|
|
#ifdef VK_NV_dedicated_allocation
|
|
#endif
|
|
#ifdef VK_EXT_transform_feedback
|
|
case OP_vkCmdBindTransformFeedbackBuffersEXT: {
|
|
android::base::beginTrace("vkCmdBindTransformFeedbackBuffersEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstBinding;
|
|
uint32_t bindingCount;
|
|
const VkBuffer* pBuffers;
|
|
const VkDeviceSize* pOffsets;
|
|
const VkDeviceSize* pSizes;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstBinding, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&bindingCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pBuffers, ((bindingCount)) * sizeof(const VkBuffer));
|
|
if (((bindingCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((bindingCount));
|
|
for (uint32_t k = 0; k < ((bindingCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkBuffer*)pBuffers) + k) = (VkBuffer)unbox_VkBuffer((VkBuffer)tmpval);
|
|
}
|
|
}
|
|
vkReadStream->alloc((void**)&pOffsets,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pOffsets, *readStreamPtrPtr,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
*readStreamPtrPtr += ((bindingCount)) * sizeof(const VkDeviceSize);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDeviceSize**)&pSizes, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSizes);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSizes) {
|
|
vkReadStream->alloc((void**)&pSizes,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pSizes, *readStreamPtrPtr,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
*readStreamPtrPtr += ((bindingCount)) * sizeof(const VkDeviceSize);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBindTransformFeedbackBuffersEXT 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstBinding, (unsigned long long)bindingCount,
|
|
(unsigned long long)pBuffers, (unsigned long long)pOffsets,
|
|
(unsigned long long)pSizes);
|
|
}
|
|
vk->vkCmdBindTransformFeedbackBuffersEXT(unboxed_commandBuffer, firstBinding,
|
|
bindingCount, pBuffers, pOffsets, pSizes);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBindTransformFeedbackBuffersEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBeginTransformFeedbackEXT: {
|
|
android::base::beginTrace("vkCmdBeginTransformFeedbackEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstCounterBuffer;
|
|
uint32_t counterBufferCount;
|
|
const VkBuffer* pCounterBuffers;
|
|
const VkDeviceSize* pCounterBufferOffsets;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstCounterBuffer, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&counterBufferCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkBuffer**)&pCounterBuffers, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCounterBuffers);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCounterBuffers) {
|
|
vkReadStream->alloc((void**)&pCounterBuffers,
|
|
((counterBufferCount)) * sizeof(const VkBuffer));
|
|
if (((counterBufferCount))) {
|
|
uint8_t* cgen_var_1_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((counterBufferCount));
|
|
for (uint32_t k = 0; k < ((counterBufferCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkBuffer*)pCounterBuffers) + k) =
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)tmpval);
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDeviceSize**)&pCounterBufferOffsets, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCounterBufferOffsets);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCounterBufferOffsets) {
|
|
vkReadStream->alloc((void**)&pCounterBufferOffsets,
|
|
((counterBufferCount)) * sizeof(const VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pCounterBufferOffsets, *readStreamPtrPtr,
|
|
((counterBufferCount)) * sizeof(const VkDeviceSize));
|
|
*readStreamPtrPtr += ((counterBufferCount)) * sizeof(const VkDeviceSize);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBeginTransformFeedbackEXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstCounterBuffer,
|
|
(unsigned long long)counterBufferCount,
|
|
(unsigned long long)pCounterBuffers,
|
|
(unsigned long long)pCounterBufferOffsets);
|
|
}
|
|
vk->vkCmdBeginTransformFeedbackEXT(unboxed_commandBuffer, firstCounterBuffer,
|
|
counterBufferCount, pCounterBuffers,
|
|
pCounterBufferOffsets);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginTransformFeedbackEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
firstCounterBuffer, counterBufferCount, pCounterBuffers,
|
|
pCounterBufferOffsets);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndTransformFeedbackEXT: {
|
|
android::base::beginTrace("vkCmdEndTransformFeedbackEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstCounterBuffer;
|
|
uint32_t counterBufferCount;
|
|
const VkBuffer* pCounterBuffers;
|
|
const VkDeviceSize* pCounterBufferOffsets;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstCounterBuffer, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&counterBufferCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkBuffer**)&pCounterBuffers, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCounterBuffers);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCounterBuffers) {
|
|
vkReadStream->alloc((void**)&pCounterBuffers,
|
|
((counterBufferCount)) * sizeof(const VkBuffer));
|
|
if (((counterBufferCount))) {
|
|
uint8_t* cgen_var_1_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((counterBufferCount));
|
|
for (uint32_t k = 0; k < ((counterBufferCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkBuffer*)pCounterBuffers) + k) =
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)tmpval);
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDeviceSize**)&pCounterBufferOffsets, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCounterBufferOffsets);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCounterBufferOffsets) {
|
|
vkReadStream->alloc((void**)&pCounterBufferOffsets,
|
|
((counterBufferCount)) * sizeof(const VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pCounterBufferOffsets, *readStreamPtrPtr,
|
|
((counterBufferCount)) * sizeof(const VkDeviceSize));
|
|
*readStreamPtrPtr += ((counterBufferCount)) * sizeof(const VkDeviceSize);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdEndTransformFeedbackEXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstCounterBuffer,
|
|
(unsigned long long)counterBufferCount,
|
|
(unsigned long long)pCounterBuffers,
|
|
(unsigned long long)pCounterBufferOffsets);
|
|
}
|
|
vk->vkCmdEndTransformFeedbackEXT(unboxed_commandBuffer, firstCounterBuffer,
|
|
counterBufferCount, pCounterBuffers,
|
|
pCounterBufferOffsets);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndTransformFeedbackEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
firstCounterBuffer, counterBufferCount, pCounterBuffers,
|
|
pCounterBufferOffsets);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBeginQueryIndexedEXT: {
|
|
android::base::beginTrace("vkCmdBeginQueryIndexedEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkQueryPool queryPool;
|
|
uint32_t query;
|
|
VkQueryControlFlags flags;
|
|
uint32_t index;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((VkQueryControlFlags*)&flags, *readStreamPtrPtr,
|
|
sizeof(VkQueryControlFlags));
|
|
*readStreamPtrPtr += sizeof(VkQueryControlFlags);
|
|
memcpy((uint32_t*)&index, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBeginQueryIndexedEXT 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)queryPool, (unsigned long long)query,
|
|
(unsigned long long)flags, (unsigned long long)index);
|
|
}
|
|
vk->vkCmdBeginQueryIndexedEXT(unboxed_commandBuffer, queryPool, query, flags,
|
|
index);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginQueryIndexedEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, queryPool,
|
|
query, flags, index);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndQueryIndexedEXT: {
|
|
android::base::beginTrace("vkCmdEndQueryIndexedEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkQueryPool queryPool;
|
|
uint32_t query;
|
|
uint32_t index;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&index, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdEndQueryIndexedEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)queryPool,
|
|
(unsigned long long)query, (unsigned long long)index);
|
|
}
|
|
vk->vkCmdEndQueryIndexedEXT(unboxed_commandBuffer, queryPool, query, index);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndQueryIndexedEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, queryPool,
|
|
query, index);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawIndirectByteCountEXT: {
|
|
android::base::beginTrace("vkCmdDrawIndirectByteCountEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t instanceCount;
|
|
uint32_t firstInstance;
|
|
VkBuffer counterBuffer;
|
|
VkDeviceSize counterBufferOffset;
|
|
uint32_t counterOffset;
|
|
uint32_t vertexStride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&instanceCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&firstInstance, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&counterBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&counterBufferOffset, *readStreamPtrPtr,
|
|
sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&counterOffset, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&vertexStride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawIndirectByteCountEXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)instanceCount, (unsigned long long)firstInstance,
|
|
(unsigned long long)counterBuffer,
|
|
(unsigned long long)counterBufferOffset,
|
|
(unsigned long long)counterOffset, (unsigned long long)vertexStride);
|
|
}
|
|
vk->vkCmdDrawIndirectByteCountEXT(unboxed_commandBuffer, instanceCount,
|
|
firstInstance, counterBuffer, counterBufferOffset,
|
|
counterOffset, vertexStride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndirectByteCountEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
instanceCount, firstInstance, counterBuffer, counterBufferOffset,
|
|
counterOffset, vertexStride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NVX_binary_import
|
|
case OP_vkCreateCuModuleNVX: {
|
|
android::base::beginTrace("vkCreateCuModuleNVX decode");
|
|
VkDevice device;
|
|
const VkCuModuleCreateInfoNVX* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkCuModuleNVX* pModule;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkCuModuleCreateInfoNVX));
|
|
reservedunmarshal_VkCuModuleCreateInfoNVX(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCuModuleCreateInfoNVX*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pModule;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pModule, sizeof(VkCuModuleNVX));
|
|
memcpy((VkCuModuleNVX*)&(*pModule), (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pModule));
|
|
*readStreamPtrPtr += 8;
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkCuModuleCreateInfoNVX(
|
|
m_state, (VkCuModuleCreateInfoNVX*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateCuModuleNVX 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pModule);
|
|
}
|
|
VkResult vkCreateCuModuleNVX_VkResult_return = (VkResult)0;
|
|
vkCreateCuModuleNVX_VkResult_return =
|
|
vk->vkCreateCuModuleNVX(unboxed_device, pCreateInfo, pAllocator, pModule);
|
|
if ((vkCreateCuModuleNVX_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateCuModuleNVX_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3 = (uint64_t)(*pModule);
|
|
vkStream->putBe64(cgen_var_3);
|
|
vkStream->write(&vkCreateCuModuleNVX_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateCuModuleNVX(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateCuModuleNVX_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pModule);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateCuFunctionNVX: {
|
|
android::base::beginTrace("vkCreateCuFunctionNVX decode");
|
|
VkDevice device;
|
|
const VkCuFunctionCreateInfoNVX* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkCuFunctionNVX* pFunction;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkCuFunctionCreateInfoNVX));
|
|
reservedunmarshal_VkCuFunctionCreateInfoNVX(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCuFunctionCreateInfoNVX*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pFunction;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFunction, sizeof(VkCuFunctionNVX));
|
|
memcpy((VkCuFunctionNVX*)&(*pFunction), (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pFunction));
|
|
*readStreamPtrPtr += 8;
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkCuFunctionCreateInfoNVX(
|
|
m_state, (VkCuFunctionCreateInfoNVX*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateCuFunctionNVX 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pFunction);
|
|
}
|
|
VkResult vkCreateCuFunctionNVX_VkResult_return = (VkResult)0;
|
|
vkCreateCuFunctionNVX_VkResult_return =
|
|
vk->vkCreateCuFunctionNVX(unboxed_device, pCreateInfo, pAllocator, pFunction);
|
|
if ((vkCreateCuFunctionNVX_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateCuFunctionNVX_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3 = (uint64_t)(*pFunction);
|
|
vkStream->putBe64(cgen_var_3);
|
|
vkStream->write(&vkCreateCuFunctionNVX_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateCuFunctionNVX(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateCuFunctionNVX_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pFunction);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyCuModuleNVX: {
|
|
android::base::beginTrace("vkDestroyCuModuleNVX decode");
|
|
VkDevice device;
|
|
VkCuModuleNVX module;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkCuModuleNVX*)&module, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&module);
|
|
*readStreamPtrPtr += 8;
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkDestroyCuModuleNVX 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)module,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyCuModuleNVX(unboxed_device, module, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyCuModuleNVX(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool, device,
|
|
module, pAllocator);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyCuFunctionNVX: {
|
|
android::base::beginTrace("vkDestroyCuFunctionNVX decode");
|
|
VkDevice device;
|
|
VkCuFunctionNVX function;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkCuFunctionNVX*)&function, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&function);
|
|
*readStreamPtrPtr += 8;
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyCuFunctionNVX 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)function,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyCuFunctionNVX(unboxed_device, function, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyCuFunctionNVX(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool, device,
|
|
function, pAllocator);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCuLaunchKernelNVX: {
|
|
android::base::beginTrace("vkCmdCuLaunchKernelNVX decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCuLaunchInfoNVX* pLaunchInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pLaunchInfo, sizeof(const VkCuLaunchInfoNVX));
|
|
reservedunmarshal_VkCuLaunchInfoNVX(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCuLaunchInfoNVX*)(pLaunchInfo),
|
|
readStreamPtrPtr);
|
|
if (pLaunchInfo) {
|
|
transform_tohost_VkCuLaunchInfoNVX(m_state, (VkCuLaunchInfoNVX*)(pLaunchInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdCuLaunchKernelNVX 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pLaunchInfo);
|
|
}
|
|
vk->vkCmdCuLaunchKernelNVX(unboxed_commandBuffer, pLaunchInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCuLaunchKernelNVX(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, pLaunchInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NVX_image_view_handle
|
|
case OP_vkGetImageViewHandleNVX: {
|
|
android::base::beginTrace("vkGetImageViewHandleNVX decode");
|
|
VkDevice device;
|
|
const VkImageViewHandleInfoNVX* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkImageViewHandleInfoNVX));
|
|
reservedunmarshal_VkImageViewHandleInfoNVX(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageViewHandleInfoNVX*)(pInfo),
|
|
readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkImageViewHandleInfoNVX(m_state,
|
|
(VkImageViewHandleInfoNVX*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetImageViewHandleNVX 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
uint32_t vkGetImageViewHandleNVX_uint32_t_return = (uint32_t)0;
|
|
vkGetImageViewHandleNVX_uint32_t_return =
|
|
vk->vkGetImageViewHandleNVX(unboxed_device, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetImageViewHandleNVX_uint32_t_return, sizeof(uint32_t));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageViewHandleNVX(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetImageViewHandleNVX_uint32_t_return, device, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetImageViewAddressNVX: {
|
|
android::base::beginTrace("vkGetImageViewAddressNVX decode");
|
|
VkDevice device;
|
|
VkImageView imageView;
|
|
VkImageViewAddressPropertiesNVX* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImageView*)&imageView =
|
|
(VkImageView)unbox_VkImageView((VkImageView)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pProperties, sizeof(VkImageViewAddressPropertiesNVX));
|
|
reservedunmarshal_VkImageViewAddressPropertiesNVX(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageViewAddressPropertiesNVX*)(pProperties), readStreamPtrPtr);
|
|
if (pProperties) {
|
|
transform_tohost_VkImageViewAddressPropertiesNVX(
|
|
m_state, (VkImageViewAddressPropertiesNVX*)(pProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetImageViewAddressNVX 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)imageView,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetImageViewAddressNVX_VkResult_return = (VkResult)0;
|
|
vkGetImageViewAddressNVX_VkResult_return =
|
|
vk->vkGetImageViewAddressNVX(unboxed_device, imageView, pProperties);
|
|
if ((vkGetImageViewAddressNVX_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetImageViewAddressNVX_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pProperties) {
|
|
transform_fromhost_VkImageViewAddressPropertiesNVX(
|
|
m_state, (VkImageViewAddressPropertiesNVX*)(pProperties));
|
|
}
|
|
marshal_VkImageViewAddressPropertiesNVX(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageViewAddressPropertiesNVX*)(pProperties));
|
|
vkStream->write(&vkGetImageViewAddressNVX_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageViewAddressNVX(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetImageViewAddressNVX_VkResult_return, device, imageView, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_AMD_draw_indirect_count
|
|
case OP_vkCmdDrawIndirectCountAMD: {
|
|
android::base::beginTrace("vkCmdDrawIndirectCountAMD decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
VkBuffer countBuffer;
|
|
VkDeviceSize countBufferOffset;
|
|
uint32_t maxDrawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&countBufferOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&maxDrawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawIndirectCountAMD 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)countBuffer,
|
|
(unsigned long long)countBufferOffset, (unsigned long long)maxDrawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawIndirectCountAMD(unboxed_commandBuffer, buffer, offset, countBuffer,
|
|
countBufferOffset, maxDrawCount, stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndirectCountAMD(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, countBuffer, countBufferOffset, maxDrawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawIndexedIndirectCountAMD: {
|
|
android::base::beginTrace("vkCmdDrawIndexedIndirectCountAMD decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
VkBuffer countBuffer;
|
|
VkDeviceSize countBufferOffset;
|
|
uint32_t maxDrawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&countBufferOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&maxDrawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawIndexedIndirectCountAMD 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)countBuffer,
|
|
(unsigned long long)countBufferOffset, (unsigned long long)maxDrawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawIndexedIndirectCountAMD(unboxed_commandBuffer, buffer, offset,
|
|
countBuffer, countBufferOffset, maxDrawCount,
|
|
stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawIndexedIndirectCountAMD(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, countBuffer, countBufferOffset, maxDrawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_AMD_negative_viewport_height
|
|
#endif
|
|
#ifdef VK_AMD_gpu_shader_half_float
|
|
#endif
|
|
#ifdef VK_AMD_shader_ballot
|
|
#endif
|
|
#ifdef VK_EXT_video_encode_h264
|
|
#endif
|
|
#ifdef VK_EXT_video_encode_h265
|
|
#endif
|
|
#ifdef VK_EXT_video_decode_h264
|
|
#endif
|
|
#ifdef VK_AMD_texture_gather_bias_lod
|
|
#endif
|
|
#ifdef VK_AMD_shader_info
|
|
case OP_vkGetShaderInfoAMD: {
|
|
android::base::beginTrace("vkGetShaderInfoAMD decode");
|
|
VkDevice device;
|
|
VkPipeline pipeline;
|
|
VkShaderStageFlagBits shaderStage;
|
|
VkShaderInfoTypeAMD infoType;
|
|
size_t* pInfoSize;
|
|
void* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_1));
|
|
memcpy((VkShaderStageFlagBits*)&shaderStage, *readStreamPtrPtr,
|
|
sizeof(VkShaderStageFlagBits));
|
|
*readStreamPtrPtr += sizeof(VkShaderStageFlagBits);
|
|
memcpy((VkShaderInfoTypeAMD*)&infoType, *readStreamPtrPtr,
|
|
sizeof(VkShaderInfoTypeAMD));
|
|
*readStreamPtrPtr += sizeof(VkShaderInfoTypeAMD);
|
|
// Begin manual dispatchable handle unboxing for pInfoSize;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((size_t**)&pInfoSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pInfoSize);
|
|
*readStreamPtrPtr += 8;
|
|
if (pInfoSize) {
|
|
vkReadStream->alloc((void**)&pInfoSize, sizeof(size_t));
|
|
memcpy((size_t*)&(*pInfoSize), (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pInfoSize));
|
|
*readStreamPtrPtr += 8;
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pInfo;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((void**)&pInfo, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pInfo);
|
|
*readStreamPtrPtr += 8;
|
|
if (pInfo) {
|
|
vkReadStream->alloc((void**)&pInfo, (*(pInfoSize)) * sizeof(uint8_t));
|
|
memcpy((void*)pInfo, *readStreamPtrPtr, (*(pInfoSize)) * sizeof(uint8_t));
|
|
*readStreamPtrPtr += (*(pInfoSize)) * sizeof(uint8_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetShaderInfoAMD 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipeline,
|
|
(unsigned long long)shaderStage, (unsigned long long)infoType,
|
|
(unsigned long long)pInfoSize, (unsigned long long)pInfo);
|
|
}
|
|
VkResult vkGetShaderInfoAMD_VkResult_return = (VkResult)0;
|
|
vkGetShaderInfoAMD_VkResult_return = vk->vkGetShaderInfoAMD(
|
|
unboxed_device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
|
|
if ((vkGetShaderInfoAMD_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetShaderInfoAMD_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pInfoSize;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pInfoSize) {
|
|
uint64_t cgen_var_4_0 = (uint64_t)(*pInfoSize);
|
|
vkStream->putBe64(cgen_var_4_0);
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pInfo;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pInfo) {
|
|
vkStream->write((void*)pInfo, (*(pInfoSize)) * sizeof(uint8_t));
|
|
}
|
|
vkStream->write(&vkGetShaderInfoAMD_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetShaderInfoAMD(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetShaderInfoAMD_VkResult_return, device, pipeline, shaderStage, infoType,
|
|
pInfoSize, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_AMD_shader_image_load_store_lod
|
|
#endif
|
|
#ifdef VK_GGP_stream_descriptor_surface
|
|
case OP_vkCreateStreamDescriptorSurfaceGGP: {
|
|
android::base::beginTrace("vkCreateStreamDescriptorSurfaceGGP decode");
|
|
VkInstance instance;
|
|
const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkStreamDescriptorSurfaceCreateInfoGGP));
|
|
reservedunmarshal_VkStreamDescriptorSurfaceCreateInfoGGP(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkStreamDescriptorSurfaceCreateInfoGGP*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkStreamDescriptorSurfaceCreateInfoGGP(
|
|
m_state, (VkStreamDescriptorSurfaceCreateInfoGGP*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateStreamDescriptorSurfaceGGP 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateStreamDescriptorSurfaceGGP_VkResult_return = (VkResult)0;
|
|
vkCreateStreamDescriptorSurfaceGGP_VkResult_return =
|
|
vk->vkCreateStreamDescriptorSurfaceGGP(unboxed_instance, pCreateInfo,
|
|
pAllocator, pSurface);
|
|
if ((vkCreateStreamDescriptorSurfaceGGP_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateStreamDescriptorSurfaceGGP_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateStreamDescriptorSurfaceGGP_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateStreamDescriptorSurfaceGGP(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateStreamDescriptorSurfaceGGP_VkResult_return, instance, pCreateInfo,
|
|
pAllocator, pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_corner_sampled_image
|
|
#endif
|
|
#ifdef VK_IMG_format_pvrtc
|
|
#endif
|
|
#ifdef VK_NV_external_memory_capabilities
|
|
case OP_vkGetPhysicalDeviceExternalImageFormatPropertiesNV: {
|
|
android::base::beginTrace(
|
|
"vkGetPhysicalDeviceExternalImageFormatPropertiesNV decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkFormat format;
|
|
VkImageType type;
|
|
VkImageTiling tiling;
|
|
VkImageUsageFlags usage;
|
|
VkImageCreateFlags flags;
|
|
VkExternalMemoryHandleTypeFlagsNV externalHandleType;
|
|
VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((VkFormat*)&format, *readStreamPtrPtr, sizeof(VkFormat));
|
|
*readStreamPtrPtr += sizeof(VkFormat);
|
|
memcpy((VkImageType*)&type, *readStreamPtrPtr, sizeof(VkImageType));
|
|
*readStreamPtrPtr += sizeof(VkImageType);
|
|
memcpy((VkImageTiling*)&tiling, *readStreamPtrPtr, sizeof(VkImageTiling));
|
|
*readStreamPtrPtr += sizeof(VkImageTiling);
|
|
memcpy((VkImageUsageFlags*)&usage, *readStreamPtrPtr, sizeof(VkImageUsageFlags));
|
|
*readStreamPtrPtr += sizeof(VkImageUsageFlags);
|
|
memcpy((VkImageCreateFlags*)&flags, *readStreamPtrPtr, sizeof(VkImageCreateFlags));
|
|
*readStreamPtrPtr += sizeof(VkImageCreateFlags);
|
|
memcpy((VkExternalMemoryHandleTypeFlagsNV*)&externalHandleType, *readStreamPtrPtr,
|
|
sizeof(VkExternalMemoryHandleTypeFlagsNV));
|
|
*readStreamPtrPtr += sizeof(VkExternalMemoryHandleTypeFlagsNV);
|
|
// Begin manual dispatchable handle unboxing for pExternalImageFormatProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pExternalImageFormatProperties,
|
|
sizeof(VkExternalImageFormatPropertiesNV));
|
|
reservedunmarshal_VkExternalImageFormatPropertiesNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties),
|
|
readStreamPtrPtr);
|
|
if (pExternalImageFormatProperties) {
|
|
transform_tohost_VkExternalImageFormatPropertiesNV(
|
|
m_state,
|
|
(VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceExternalImageFormatPropertiesNV "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)format, (unsigned long long)type,
|
|
(unsigned long long)tiling, (unsigned long long)usage,
|
|
(unsigned long long)flags, (unsigned long long)externalHandleType,
|
|
(unsigned long long)pExternalImageFormatProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return =
|
|
(VkResult)0;
|
|
vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return =
|
|
vk->vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
|
|
unboxed_physicalDevice, format, type, tiling, usage, flags,
|
|
externalHandleType, pExternalImageFormatProperties);
|
|
if ((vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pExternalImageFormatProperties) {
|
|
transform_fromhost_VkExternalImageFormatPropertiesNV(
|
|
m_state,
|
|
(VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
|
|
}
|
|
marshal_VkExternalImageFormatPropertiesNV(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
|
|
vkStream->write(&vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return,
|
|
physicalDevice, format, type, tiling, usage, flags, externalHandleType,
|
|
pExternalImageFormatProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_external_memory
|
|
#endif
|
|
#ifdef VK_NV_external_memory_win32
|
|
case OP_vkGetMemoryWin32HandleNV: {
|
|
android::base::beginTrace("vkGetMemoryWin32HandleNV decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
VkExternalMemoryHandleTypeFlagsNV handleType;
|
|
HANDLE* pHandle;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_1));
|
|
memcpy((VkExternalMemoryHandleTypeFlagsNV*)&handleType, *readStreamPtrPtr,
|
|
sizeof(VkExternalMemoryHandleTypeFlagsNV));
|
|
*readStreamPtrPtr += sizeof(VkExternalMemoryHandleTypeFlagsNV);
|
|
// Begin manual dispatchable handle unboxing for pHandle;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pHandle, sizeof(HANDLE));
|
|
memcpy((HANDLE*)pHandle, *readStreamPtrPtr, sizeof(HANDLE));
|
|
*readStreamPtrPtr += sizeof(HANDLE);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetMemoryWin32HandleNV 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memory,
|
|
(unsigned long long)handleType, (unsigned long long)pHandle);
|
|
}
|
|
VkResult vkGetMemoryWin32HandleNV_VkResult_return = (VkResult)0;
|
|
vkGetMemoryWin32HandleNV_VkResult_return =
|
|
vk->vkGetMemoryWin32HandleNV(unboxed_device, memory, handleType, pHandle);
|
|
if ((vkGetMemoryWin32HandleNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetMemoryWin32HandleNV_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((HANDLE*)pHandle, sizeof(HANDLE));
|
|
vkStream->write(&vkGetMemoryWin32HandleNV_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryWin32HandleNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryWin32HandleNV_VkResult_return, device, memory, handleType,
|
|
pHandle);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_win32_keyed_mutex
|
|
#endif
|
|
#ifdef VK_EXT_validation_flags
|
|
#endif
|
|
#ifdef VK_NN_vi_surface
|
|
case OP_vkCreateViSurfaceNN: {
|
|
android::base::beginTrace("vkCreateViSurfaceNN decode");
|
|
VkInstance instance;
|
|
const VkViSurfaceCreateInfoNN* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkViSurfaceCreateInfoNN));
|
|
reservedunmarshal_VkViSurfaceCreateInfoNN(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkViSurfaceCreateInfoNN*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkViSurfaceCreateInfoNN(
|
|
m_state, (VkViSurfaceCreateInfoNN*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateViSurfaceNN 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateViSurfaceNN_VkResult_return = (VkResult)0;
|
|
vkCreateViSurfaceNN_VkResult_return =
|
|
vk->vkCreateViSurfaceNN(unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateViSurfaceNN_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateViSurfaceNN_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateViSurfaceNN_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateViSurfaceNN(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateViSurfaceNN_VkResult_return, instance, pCreateInfo, pAllocator,
|
|
pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_shader_subgroup_ballot
|
|
#endif
|
|
#ifdef VK_EXT_shader_subgroup_vote
|
|
#endif
|
|
#ifdef VK_EXT_texture_compression_astc_hdr
|
|
#endif
|
|
#ifdef VK_EXT_astc_decode_mode
|
|
#endif
|
|
#ifdef VK_EXT_conditional_rendering
|
|
case OP_vkCmdBeginConditionalRenderingEXT: {
|
|
android::base::beginTrace("vkCmdBeginConditionalRenderingEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pConditionalRenderingBegin,
|
|
sizeof(const VkConditionalRenderingBeginInfoEXT));
|
|
reservedunmarshal_VkConditionalRenderingBeginInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkConditionalRenderingBeginInfoEXT*)(pConditionalRenderingBegin),
|
|
readStreamPtrPtr);
|
|
if (pConditionalRenderingBegin) {
|
|
transform_tohost_VkConditionalRenderingBeginInfoEXT(
|
|
m_state, (VkConditionalRenderingBeginInfoEXT*)(pConditionalRenderingBegin));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBeginConditionalRenderingEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pConditionalRenderingBegin);
|
|
}
|
|
vk->vkCmdBeginConditionalRenderingEXT(unboxed_commandBuffer,
|
|
pConditionalRenderingBegin);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginConditionalRenderingEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pConditionalRenderingBegin);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndConditionalRenderingEXT: {
|
|
android::base::beginTrace("vkCmdEndConditionalRenderingEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdEndConditionalRenderingEXT 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer);
|
|
}
|
|
vk->vkCmdEndConditionalRenderingEXT(unboxed_commandBuffer);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndConditionalRenderingEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_clip_space_w_scaling
|
|
case OP_vkCmdSetViewportWScalingNV: {
|
|
android::base::beginTrace("vkCmdSetViewportWScalingNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstViewport;
|
|
uint32_t viewportCount;
|
|
const VkViewportWScalingNV* pViewportWScalings;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstViewport, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&viewportCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pViewportWScalings,
|
|
((viewportCount)) * sizeof(const VkViewportWScalingNV));
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
|
reservedunmarshal_VkViewportWScalingNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkViewportWScalingNV*)(pViewportWScalings + i), readStreamPtrPtr);
|
|
}
|
|
if (pViewportWScalings) {
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
|
transform_tohost_VkViewportWScalingNV(
|
|
m_state, (VkViewportWScalingNV*)(pViewportWScalings + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdSetViewportWScalingNV 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstViewport, (unsigned long long)viewportCount,
|
|
(unsigned long long)pViewportWScalings);
|
|
}
|
|
vk->vkCmdSetViewportWScalingNV(unboxed_commandBuffer, firstViewport, viewportCount,
|
|
pViewportWScalings);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetViewportWScalingNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
firstViewport, viewportCount, pViewportWScalings);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_direct_mode_display
|
|
case OP_vkReleaseDisplayEXT: {
|
|
android::base::beginTrace("vkReleaseDisplayEXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkDisplayKHR display;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayKHR*)&display =
|
|
(VkDisplayKHR)unbox_VkDisplayKHR((VkDisplayKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkReleaseDisplayEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)display);
|
|
}
|
|
VkResult vkReleaseDisplayEXT_VkResult_return = (VkResult)0;
|
|
vkReleaseDisplayEXT_VkResult_return =
|
|
vk->vkReleaseDisplayEXT(unboxed_physicalDevice, display);
|
|
if ((vkReleaseDisplayEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkReleaseDisplayEXT_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkReleaseDisplayEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkReleaseDisplayEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkReleaseDisplayEXT_VkResult_return, physicalDevice, display);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_acquire_xlib_display
|
|
case OP_vkAcquireXlibDisplayEXT: {
|
|
android::base::beginTrace("vkAcquireXlibDisplayEXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
Display* dpy;
|
|
VkDisplayKHR display;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for dpy;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&dpy, sizeof(Display));
|
|
memcpy((Display*)dpy, *readStreamPtrPtr, sizeof(Display));
|
|
*readStreamPtrPtr += sizeof(Display);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayKHR*)&display =
|
|
(VkDisplayKHR)unbox_VkDisplayKHR((VkDisplayKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAcquireXlibDisplayEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice, (unsigned long long)dpy,
|
|
(unsigned long long)display);
|
|
}
|
|
VkResult vkAcquireXlibDisplayEXT_VkResult_return = (VkResult)0;
|
|
vkAcquireXlibDisplayEXT_VkResult_return =
|
|
vk->vkAcquireXlibDisplayEXT(unboxed_physicalDevice, dpy, display);
|
|
if ((vkAcquireXlibDisplayEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAcquireXlibDisplayEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((Display*)dpy, sizeof(Display));
|
|
vkStream->write(&vkAcquireXlibDisplayEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAcquireXlibDisplayEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAcquireXlibDisplayEXT_VkResult_return, physicalDevice, dpy, display);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetRandROutputDisplayEXT: {
|
|
android::base::beginTrace("vkGetRandROutputDisplayEXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
Display* dpy;
|
|
RROutput rrOutput;
|
|
VkDisplayKHR* pDisplay;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for dpy;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&dpy, sizeof(Display));
|
|
memcpy((Display*)dpy, *readStreamPtrPtr, sizeof(Display));
|
|
*readStreamPtrPtr += sizeof(Display);
|
|
memcpy((RROutput*)&rrOutput, *readStreamPtrPtr, sizeof(RROutput));
|
|
*readStreamPtrPtr += sizeof(RROutput);
|
|
// Begin manual dispatchable handle unboxing for pDisplay;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDisplay, sizeof(VkDisplayKHR));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDisplayKHR*)pDisplay =
|
|
(VkDisplayKHR)(VkDisplayKHR)((VkDisplayKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetRandROutputDisplayEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice, (unsigned long long)dpy,
|
|
(unsigned long long)rrOutput, (unsigned long long)pDisplay);
|
|
}
|
|
VkResult vkGetRandROutputDisplayEXT_VkResult_return = (VkResult)0;
|
|
vkGetRandROutputDisplayEXT_VkResult_return =
|
|
vk->vkGetRandROutputDisplayEXT(unboxed_physicalDevice, dpy, rrOutput, pDisplay);
|
|
if ((vkGetRandROutputDisplayEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetRandROutputDisplayEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((Display*)dpy, sizeof(Display));
|
|
uint64_t cgen_var_2;
|
|
vkStream->handleMapping()->mapHandles_VkDisplayKHR_u64(pDisplay, &cgen_var_2, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_2, 8);
|
|
vkStream->write(&vkGetRandROutputDisplayEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetRandROutputDisplayEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetRandROutputDisplayEXT_VkResult_return, physicalDevice, dpy, rrOutput,
|
|
pDisplay);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_display_surface_counter
|
|
case OP_vkGetPhysicalDeviceSurfaceCapabilities2EXT: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSurfaceCapabilities2EXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkSurfaceKHR surface;
|
|
VkSurfaceCapabilities2EXT* pSurfaceCapabilities;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSurfaceKHR*)&surface =
|
|
(VkSurfaceKHR)unbox_VkSurfaceKHR((VkSurfaceKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pSurfaceCapabilities;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurfaceCapabilities,
|
|
sizeof(VkSurfaceCapabilities2EXT));
|
|
reservedunmarshal_VkSurfaceCapabilities2EXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities), readStreamPtrPtr);
|
|
if (pSurfaceCapabilities) {
|
|
transform_tohost_VkSurfaceCapabilities2EXT(
|
|
m_state, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSurfaceCapabilities2EXT 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)surface, (unsigned long long)pSurfaceCapabilities);
|
|
}
|
|
VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return =
|
|
vk->vkGetPhysicalDeviceSurfaceCapabilities2EXT(unboxed_physicalDevice, surface,
|
|
pSurfaceCapabilities);
|
|
if ((vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pSurfaceCapabilities) {
|
|
transform_fromhost_VkSurfaceCapabilities2EXT(
|
|
m_state, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
|
|
}
|
|
marshal_VkSurfaceCapabilities2EXT(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
|
|
vkStream->write(&vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSurfaceCapabilities2EXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return, physicalDevice,
|
|
surface, pSurfaceCapabilities);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_display_control
|
|
case OP_vkDisplayPowerControlEXT: {
|
|
android::base::beginTrace("vkDisplayPowerControlEXT decode");
|
|
VkDevice device;
|
|
VkDisplayKHR display;
|
|
const VkDisplayPowerInfoEXT* pDisplayPowerInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayKHR*)&display =
|
|
(VkDisplayKHR)unbox_VkDisplayKHR((VkDisplayKHR)(*&cgen_var_1));
|
|
vkReadStream->alloc((void**)&pDisplayPowerInfo,
|
|
sizeof(const VkDisplayPowerInfoEXT));
|
|
reservedunmarshal_VkDisplayPowerInfoEXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayPowerInfoEXT*)(pDisplayPowerInfo),
|
|
readStreamPtrPtr);
|
|
if (pDisplayPowerInfo) {
|
|
transform_tohost_VkDisplayPowerInfoEXT(
|
|
m_state, (VkDisplayPowerInfoEXT*)(pDisplayPowerInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDisplayPowerControlEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)display,
|
|
(unsigned long long)pDisplayPowerInfo);
|
|
}
|
|
VkResult vkDisplayPowerControlEXT_VkResult_return = (VkResult)0;
|
|
vkDisplayPowerControlEXT_VkResult_return =
|
|
vk->vkDisplayPowerControlEXT(unboxed_device, display, pDisplayPowerInfo);
|
|
if ((vkDisplayPowerControlEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkDisplayPowerControlEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkDisplayPowerControlEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDisplayPowerControlEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkDisplayPowerControlEXT_VkResult_return, device, display,
|
|
pDisplayPowerInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkRegisterDeviceEventEXT: {
|
|
android::base::beginTrace("vkRegisterDeviceEventEXT decode");
|
|
VkDevice device;
|
|
const VkDeviceEventInfoEXT* pDeviceEventInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkFence* pFence;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pDeviceEventInfo, sizeof(const VkDeviceEventInfoEXT));
|
|
reservedunmarshal_VkDeviceEventInfoEXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDeviceEventInfoEXT*)(pDeviceEventInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pFence;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFence, sizeof(VkFence));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkFence*)pFence = (VkFence)(VkFence)((VkFence)(*&cgen_var_2));
|
|
if (pDeviceEventInfo) {
|
|
transform_tohost_VkDeviceEventInfoEXT(
|
|
m_state, (VkDeviceEventInfoEXT*)(pDeviceEventInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkRegisterDeviceEventEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pDeviceEventInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pFence);
|
|
}
|
|
VkResult vkRegisterDeviceEventEXT_VkResult_return = (VkResult)0;
|
|
vkRegisterDeviceEventEXT_VkResult_return = vk->vkRegisterDeviceEventEXT(
|
|
unboxed_device, pDeviceEventInfo, pAllocator, pFence);
|
|
if ((vkRegisterDeviceEventEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkRegisterDeviceEventEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkRegisterDeviceEventEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkRegisterDeviceEventEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkRegisterDeviceEventEXT_VkResult_return, device, pDeviceEventInfo,
|
|
pAllocator, pFence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkRegisterDisplayEventEXT: {
|
|
android::base::beginTrace("vkRegisterDisplayEventEXT decode");
|
|
VkDevice device;
|
|
VkDisplayKHR display;
|
|
const VkDisplayEventInfoEXT* pDisplayEventInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkFence* pFence;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayKHR*)&display =
|
|
(VkDisplayKHR)unbox_VkDisplayKHR((VkDisplayKHR)(*&cgen_var_1));
|
|
vkReadStream->alloc((void**)&pDisplayEventInfo,
|
|
sizeof(const VkDisplayEventInfoEXT));
|
|
reservedunmarshal_VkDisplayEventInfoEXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDisplayEventInfoEXT*)(pDisplayEventInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pFence;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pFence, sizeof(VkFence));
|
|
uint64_t cgen_var_3;
|
|
memcpy((uint64_t*)&cgen_var_3, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkFence*)pFence = (VkFence)(VkFence)((VkFence)(*&cgen_var_3));
|
|
if (pDisplayEventInfo) {
|
|
transform_tohost_VkDisplayEventInfoEXT(
|
|
m_state, (VkDisplayEventInfoEXT*)(pDisplayEventInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkRegisterDisplayEventEXT 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)display,
|
|
(unsigned long long)pDisplayEventInfo, (unsigned long long)pAllocator,
|
|
(unsigned long long)pFence);
|
|
}
|
|
VkResult vkRegisterDisplayEventEXT_VkResult_return = (VkResult)0;
|
|
vkRegisterDisplayEventEXT_VkResult_return = vk->vkRegisterDisplayEventEXT(
|
|
unboxed_device, display, pDisplayEventInfo, pAllocator, pFence);
|
|
if ((vkRegisterDisplayEventEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkRegisterDisplayEventEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_4;
|
|
vkStream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_4, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_4, 8);
|
|
vkStream->write(&vkRegisterDisplayEventEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkRegisterDisplayEventEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkRegisterDisplayEventEXT_VkResult_return, device, display,
|
|
pDisplayEventInfo, pAllocator, pFence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetSwapchainCounterEXT: {
|
|
android::base::beginTrace("vkGetSwapchainCounterEXT decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
VkSurfaceCounterFlagBitsEXT counter;
|
|
uint64_t* pCounterValue;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
memcpy((VkSurfaceCounterFlagBitsEXT*)&counter, *readStreamPtrPtr,
|
|
sizeof(VkSurfaceCounterFlagBitsEXT));
|
|
*readStreamPtrPtr += sizeof(VkSurfaceCounterFlagBitsEXT);
|
|
// Begin manual dispatchable handle unboxing for pCounterValue;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCounterValue, sizeof(uint64_t));
|
|
memcpy((uint64_t*)pCounterValue, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetSwapchainCounterEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain,
|
|
(unsigned long long)counter, (unsigned long long)pCounterValue);
|
|
}
|
|
VkResult vkGetSwapchainCounterEXT_VkResult_return = (VkResult)0;
|
|
vkGetSwapchainCounterEXT_VkResult_return =
|
|
vk->vkGetSwapchainCounterEXT(unboxed_device, swapchain, counter, pCounterValue);
|
|
if ((vkGetSwapchainCounterEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetSwapchainCounterEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint64_t*)pCounterValue, sizeof(uint64_t));
|
|
vkStream->write(&vkGetSwapchainCounterEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetSwapchainCounterEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetSwapchainCounterEXT_VkResult_return, device, swapchain, counter,
|
|
pCounterValue);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_GOOGLE_display_timing
|
|
case OP_vkGetRefreshCycleDurationGOOGLE: {
|
|
android::base::beginTrace("vkGetRefreshCycleDurationGOOGLE decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pDisplayTimingProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDisplayTimingProperties,
|
|
sizeof(VkRefreshCycleDurationGOOGLE));
|
|
reservedunmarshal_VkRefreshCycleDurationGOOGLE(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties), readStreamPtrPtr);
|
|
if (pDisplayTimingProperties) {
|
|
transform_tohost_VkRefreshCycleDurationGOOGLE(
|
|
m_state, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetRefreshCycleDurationGOOGLE 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain,
|
|
(unsigned long long)pDisplayTimingProperties);
|
|
}
|
|
VkResult vkGetRefreshCycleDurationGOOGLE_VkResult_return = (VkResult)0;
|
|
vkGetRefreshCycleDurationGOOGLE_VkResult_return =
|
|
vk->vkGetRefreshCycleDurationGOOGLE(unboxed_device, swapchain,
|
|
pDisplayTimingProperties);
|
|
if ((vkGetRefreshCycleDurationGOOGLE_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetRefreshCycleDurationGOOGLE_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pDisplayTimingProperties) {
|
|
transform_fromhost_VkRefreshCycleDurationGOOGLE(
|
|
m_state, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
|
|
}
|
|
marshal_VkRefreshCycleDurationGOOGLE(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
|
|
vkStream->write(&vkGetRefreshCycleDurationGOOGLE_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetRefreshCycleDurationGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetRefreshCycleDurationGOOGLE_VkResult_return, device, swapchain,
|
|
pDisplayTimingProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPastPresentationTimingGOOGLE: {
|
|
android::base::beginTrace("vkGetPastPresentationTimingGOOGLE decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
uint32_t* pPresentationTimingCount;
|
|
VkPastPresentationTimingGOOGLE* pPresentationTimings;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pPresentationTimingCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPresentationTimingCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPresentationTimingCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPresentationTimingCount) {
|
|
vkReadStream->alloc((void**)&pPresentationTimingCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPresentationTimingCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPresentationTimings;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPastPresentationTimingGOOGLE**)&pPresentationTimings, (*readStreamPtrPtr),
|
|
8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPresentationTimings);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPresentationTimings) {
|
|
vkReadStream->alloc(
|
|
(void**)&pPresentationTimings,
|
|
(*(pPresentationTimingCount)) * sizeof(VkPastPresentationTimingGOOGLE));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i) {
|
|
reservedunmarshal_VkPastPresentationTimingGOOGLE(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPresentationTimingCount) {
|
|
if (pPresentationTimings) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i) {
|
|
transform_tohost_VkPastPresentationTimingGOOGLE(
|
|
m_state,
|
|
(VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPastPresentationTimingGOOGLE 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain,
|
|
(unsigned long long)pPresentationTimingCount,
|
|
(unsigned long long)pPresentationTimings);
|
|
}
|
|
VkResult vkGetPastPresentationTimingGOOGLE_VkResult_return = (VkResult)0;
|
|
vkGetPastPresentationTimingGOOGLE_VkResult_return =
|
|
vk->vkGetPastPresentationTimingGOOGLE(
|
|
unboxed_device, swapchain, pPresentationTimingCount, pPresentationTimings);
|
|
if ((vkGetPastPresentationTimingGOOGLE_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetPastPresentationTimingGOOGLE_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pPresentationTimingCount;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pPresentationTimingCount) {
|
|
vkStream->write((uint32_t*)pPresentationTimingCount, sizeof(uint32_t));
|
|
}
|
|
if (pPresentationTimingCount) {
|
|
if (pPresentationTimings) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i) {
|
|
transform_fromhost_VkPastPresentationTimingGOOGLE(
|
|
m_state,
|
|
(VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pPresentationTimings;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pPresentationTimings) {
|
|
if (pPresentationTimingCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i) {
|
|
marshal_VkPastPresentationTimingGOOGLE(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPastPresentationTimingGOOGLE_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPastPresentationTimingGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPastPresentationTimingGOOGLE_VkResult_return, device, swapchain,
|
|
pPresentationTimingCount, pPresentationTimings);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_sample_mask_override_coverage
|
|
#endif
|
|
#ifdef VK_NV_geometry_shader_passthrough
|
|
#endif
|
|
#ifdef VK_NV_viewport_array2
|
|
#endif
|
|
#ifdef VK_NVX_multiview_per_view_attributes
|
|
#endif
|
|
#ifdef VK_NV_viewport_swizzle
|
|
#endif
|
|
#ifdef VK_EXT_discard_rectangles
|
|
case OP_vkCmdSetDiscardRectangleEXT: {
|
|
android::base::beginTrace("vkCmdSetDiscardRectangleEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstDiscardRectangle;
|
|
uint32_t discardRectangleCount;
|
|
const VkRect2D* pDiscardRectangles;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstDiscardRectangle, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&discardRectangleCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pDiscardRectangles,
|
|
((discardRectangleCount)) * sizeof(const VkRect2D));
|
|
for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i) {
|
|
reservedunmarshal_VkRect2D(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRect2D*)(pDiscardRectangles + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pDiscardRectangles) {
|
|
for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i) {
|
|
transform_tohost_VkRect2D(m_state, (VkRect2D*)(pDiscardRectangles + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetDiscardRectangleEXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstDiscardRectangle,
|
|
(unsigned long long)discardRectangleCount,
|
|
(unsigned long long)pDiscardRectangles);
|
|
}
|
|
vk->vkCmdSetDiscardRectangleEXT(unboxed_commandBuffer, firstDiscardRectangle,
|
|
discardRectangleCount, pDiscardRectangles);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDiscardRectangleEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_conservative_rasterization
|
|
#endif
|
|
#ifdef VK_EXT_depth_clip_enable
|
|
#endif
|
|
#ifdef VK_EXT_swapchain_colorspace
|
|
#endif
|
|
#ifdef VK_EXT_hdr_metadata
|
|
case OP_vkSetHdrMetadataEXT: {
|
|
android::base::beginTrace("vkSetHdrMetadataEXT decode");
|
|
VkDevice device;
|
|
uint32_t swapchainCount;
|
|
const VkSwapchainKHR* pSwapchains;
|
|
const VkHdrMetadataEXT* pMetadata;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)&swapchainCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pSwapchains,
|
|
((swapchainCount)) * sizeof(const VkSwapchainKHR));
|
|
if (((swapchainCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((swapchainCount));
|
|
for (uint32_t k = 0; k < ((swapchainCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkSwapchainKHR*)pSwapchains) + k) =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)tmpval);
|
|
}
|
|
}
|
|
vkReadStream->alloc((void**)&pMetadata,
|
|
((swapchainCount)) * sizeof(const VkHdrMetadataEXT));
|
|
for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i) {
|
|
reservedunmarshal_VkHdrMetadataEXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkHdrMetadataEXT*)(pMetadata + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pMetadata) {
|
|
for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i) {
|
|
transform_tohost_VkHdrMetadataEXT(m_state,
|
|
(VkHdrMetadataEXT*)(pMetadata + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkSetHdrMetadataEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)swapchainCount, (unsigned long long)pSwapchains,
|
|
(unsigned long long)pMetadata);
|
|
}
|
|
vk->vkSetHdrMetadataEXT(unboxed_device, swapchainCount, pSwapchains, pMetadata);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetHdrMetadataEXT(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, swapchainCount,
|
|
pSwapchains, pMetadata);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_MVK_ios_surface
|
|
case OP_vkCreateIOSSurfaceMVK: {
|
|
android::base::beginTrace("vkCreateIOSSurfaceMVK decode");
|
|
VkInstance instance;
|
|
const VkIOSSurfaceCreateInfoMVK* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkIOSSurfaceCreateInfoMVK));
|
|
reservedunmarshal_VkIOSSurfaceCreateInfoMVK(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkIOSSurfaceCreateInfoMVK*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkIOSSurfaceCreateInfoMVK(
|
|
m_state, (VkIOSSurfaceCreateInfoMVK*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateIOSSurfaceMVK 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateIOSSurfaceMVK_VkResult_return = (VkResult)0;
|
|
vkCreateIOSSurfaceMVK_VkResult_return =
|
|
vk->vkCreateIOSSurfaceMVK(unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateIOSSurfaceMVK_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateIOSSurfaceMVK_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateIOSSurfaceMVK_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateIOSSurfaceMVK(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateIOSSurfaceMVK_VkResult_return, instance, pCreateInfo, pAllocator,
|
|
pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_MVK_macos_surface
|
|
case OP_vkCreateMacOSSurfaceMVK: {
|
|
android::base::beginTrace("vkCreateMacOSSurfaceMVK decode");
|
|
VkInstance instance;
|
|
const VkMacOSSurfaceCreateInfoMVK* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkMacOSSurfaceCreateInfoMVK));
|
|
reservedunmarshal_VkMacOSSurfaceCreateInfoMVK(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMacOSSurfaceCreateInfoMVK*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkMacOSSurfaceCreateInfoMVK(
|
|
m_state, (VkMacOSSurfaceCreateInfoMVK*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreateMacOSSurfaceMVK 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateMacOSSurfaceMVK_VkResult_return = (VkResult)0;
|
|
vkCreateMacOSSurfaceMVK_VkResult_return = vk->vkCreateMacOSSurfaceMVK(
|
|
unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateMacOSSurfaceMVK_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateMacOSSurfaceMVK_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateMacOSSurfaceMVK_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateMacOSSurfaceMVK(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateMacOSSurfaceMVK_VkResult_return, instance, pCreateInfo, pAllocator,
|
|
pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_MVK_moltenvk
|
|
case OP_vkGetMTLDeviceMVK: {
|
|
android::base::beginTrace("vkGetMTLDeviceMVK decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
void** pMTLDevice;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pMTLDevice;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMTLDevice, sizeof(void*));
|
|
memcpy((void**)pMTLDevice, *readStreamPtrPtr, sizeof(void*));
|
|
*readStreamPtrPtr += sizeof(void*);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetMTLDeviceMVK 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)physicalDevice, (unsigned long long)pMTLDevice);
|
|
}
|
|
vk->vkGetMTLDeviceMVK(unboxed_physicalDevice, pMTLDevice);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void**)pMTLDevice, sizeof(void*));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMTLDeviceMVK(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, physicalDevice, pMTLDevice);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkSetMTLTextureMVK: {
|
|
android::base::beginTrace("vkSetMTLTextureMVK decode");
|
|
VkImage image;
|
|
void* mtlTexture;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for mtlTexture;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&mtlTexture, sizeof(uint8_t));
|
|
memcpy((void*)mtlTexture, *readStreamPtrPtr, sizeof(uint8_t));
|
|
*readStreamPtrPtr += sizeof(uint8_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkSetMTLTextureMVK 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)image, (unsigned long long)mtlTexture);
|
|
}
|
|
VkResult vkSetMTLTextureMVK_VkResult_return = (VkResult)0;
|
|
vkSetMTLTextureMVK_VkResult_return = vk->vkSetMTLTextureMVK(image, mtlTexture);
|
|
if ((vkSetMTLTextureMVK_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkSetMTLTextureMVK_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void*)mtlTexture, sizeof(uint8_t));
|
|
vkStream->write(&vkSetMTLTextureMVK_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetMTLTextureMVK(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkSetMTLTextureMVK_VkResult_return, image, mtlTexture);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetMTLTextureMVK: {
|
|
android::base::beginTrace("vkGetMTLTextureMVK decode");
|
|
VkImage image;
|
|
void** pMTLTexture;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pMTLTexture;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMTLTexture, sizeof(void*));
|
|
memcpy((void**)pMTLTexture, *readStreamPtrPtr, sizeof(void*));
|
|
*readStreamPtrPtr += sizeof(void*);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetMTLTextureMVK 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)image, (unsigned long long)pMTLTexture);
|
|
}
|
|
vk->vkGetMTLTextureMVK(image, pMTLTexture);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void**)pMTLTexture, sizeof(void*));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMTLTextureMVK(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, image, pMTLTexture);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetMTLBufferMVK: {
|
|
android::base::beginTrace("vkGetMTLBufferMVK decode");
|
|
VkBuffer buffer;
|
|
void** pMTLBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pMTLBuffer;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMTLBuffer, sizeof(void*));
|
|
memcpy((void**)pMTLBuffer, *readStreamPtrPtr, sizeof(void*));
|
|
*readStreamPtrPtr += sizeof(void*);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetMTLBufferMVK 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)buffer, (unsigned long long)pMTLBuffer);
|
|
}
|
|
vk->vkGetMTLBufferMVK(buffer, pMTLBuffer);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void**)pMTLBuffer, sizeof(void*));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMTLBufferMVK(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, buffer, pMTLBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkUseIOSurfaceMVK: {
|
|
android::base::beginTrace("vkUseIOSurfaceMVK decode");
|
|
VkImage image;
|
|
void* ioSurface;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for ioSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&ioSurface, sizeof(uint8_t));
|
|
memcpy((void*)ioSurface, *readStreamPtrPtr, sizeof(uint8_t));
|
|
*readStreamPtrPtr += sizeof(uint8_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkUseIOSurfaceMVK 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)image, (unsigned long long)ioSurface);
|
|
}
|
|
VkResult vkUseIOSurfaceMVK_VkResult_return = (VkResult)0;
|
|
vkUseIOSurfaceMVK_VkResult_return = vk->vkUseIOSurfaceMVK(image, ioSurface);
|
|
if ((vkUseIOSurfaceMVK_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkUseIOSurfaceMVK_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void*)ioSurface, sizeof(uint8_t));
|
|
vkStream->write(&vkUseIOSurfaceMVK_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkUseIOSurfaceMVK(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkUseIOSurfaceMVK_VkResult_return, image, ioSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetIOSurfaceMVK: {
|
|
android::base::beginTrace("vkGetIOSurfaceMVK decode");
|
|
VkImage image;
|
|
void** pIOSurface;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
|
|
// Begin manual dispatchable handle unboxing for pIOSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pIOSurface, sizeof(void*));
|
|
memcpy((void**)pIOSurface, *readStreamPtrPtr, sizeof(void*));
|
|
*readStreamPtrPtr += sizeof(void*);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetIOSurfaceMVK 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)image, (unsigned long long)pIOSurface);
|
|
}
|
|
vk->vkGetIOSurfaceMVK(image, pIOSurface);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void**)pIOSurface, sizeof(void*));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetIOSurfaceMVK(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, image, pIOSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_external_memory_dma_buf
|
|
#endif
|
|
#ifdef VK_EXT_queue_family_foreign
|
|
#endif
|
|
#ifdef VK_EXT_debug_utils
|
|
case OP_vkSetDebugUtilsObjectNameEXT: {
|
|
android::base::beginTrace("vkSetDebugUtilsObjectNameEXT decode");
|
|
VkDevice device;
|
|
const VkDebugUtilsObjectNameInfoEXT* pNameInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pNameInfo,
|
|
sizeof(const VkDebugUtilsObjectNameInfoEXT));
|
|
reservedunmarshal_VkDebugUtilsObjectNameInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugUtilsObjectNameInfoEXT*)(pNameInfo), readStreamPtrPtr);
|
|
if (pNameInfo) {
|
|
transform_tohost_VkDebugUtilsObjectNameInfoEXT(
|
|
m_state, (VkDebugUtilsObjectNameInfoEXT*)(pNameInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkSetDebugUtilsObjectNameEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pNameInfo);
|
|
}
|
|
VkResult vkSetDebugUtilsObjectNameEXT_VkResult_return = (VkResult)0;
|
|
vkSetDebugUtilsObjectNameEXT_VkResult_return =
|
|
vk->vkSetDebugUtilsObjectNameEXT(unboxed_device, pNameInfo);
|
|
if ((vkSetDebugUtilsObjectNameEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkSetDebugUtilsObjectNameEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkSetDebugUtilsObjectNameEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetDebugUtilsObjectNameEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkSetDebugUtilsObjectNameEXT_VkResult_return, device, pNameInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkSetDebugUtilsObjectTagEXT: {
|
|
android::base::beginTrace("vkSetDebugUtilsObjectTagEXT decode");
|
|
VkDevice device;
|
|
const VkDebugUtilsObjectTagInfoEXT* pTagInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pTagInfo, sizeof(const VkDebugUtilsObjectTagInfoEXT));
|
|
reservedunmarshal_VkDebugUtilsObjectTagInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugUtilsObjectTagInfoEXT*)(pTagInfo), readStreamPtrPtr);
|
|
if (pTagInfo) {
|
|
transform_tohost_VkDebugUtilsObjectTagInfoEXT(
|
|
m_state, (VkDebugUtilsObjectTagInfoEXT*)(pTagInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkSetDebugUtilsObjectTagEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pTagInfo);
|
|
}
|
|
VkResult vkSetDebugUtilsObjectTagEXT_VkResult_return = (VkResult)0;
|
|
vkSetDebugUtilsObjectTagEXT_VkResult_return =
|
|
vk->vkSetDebugUtilsObjectTagEXT(unboxed_device, pTagInfo);
|
|
if ((vkSetDebugUtilsObjectTagEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkSetDebugUtilsObjectTagEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkSetDebugUtilsObjectTagEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetDebugUtilsObjectTagEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkSetDebugUtilsObjectTagEXT_VkResult_return, device, pTagInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueBeginDebugUtilsLabelEXT: {
|
|
android::base::beginTrace("vkQueueBeginDebugUtilsLabelEXT decode");
|
|
VkQueue queue;
|
|
const VkDebugUtilsLabelEXT* pLabelInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
auto unboxed_queue = unbox_VkQueue(queue);
|
|
auto vk = dispatch_VkQueue(queue);
|
|
// End manual dispatchable handle unboxing for queue;
|
|
vkReadStream->alloc((void**)&pLabelInfo, sizeof(const VkDebugUtilsLabelEXT));
|
|
reservedunmarshal_VkDebugUtilsLabelEXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo),
|
|
readStreamPtrPtr);
|
|
if (pLabelInfo) {
|
|
transform_tohost_VkDebugUtilsLabelEXT(m_state,
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkQueueBeginDebugUtilsLabelEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)pLabelInfo);
|
|
}
|
|
vk->vkQueueBeginDebugUtilsLabelEXT(unboxed_queue, pLabelInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueBeginDebugUtilsLabelEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue, pLabelInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueEndDebugUtilsLabelEXT: {
|
|
android::base::beginTrace("vkQueueEndDebugUtilsLabelEXT decode");
|
|
VkQueue queue;
|
|
// Begin non wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
auto unboxed_queue = unbox_VkQueue(queue);
|
|
auto vk = dispatch_VkQueue(queue);
|
|
// End manual dispatchable handle unboxing for queue;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkQueueEndDebugUtilsLabelEXT 0x%llx \n",
|
|
ioStream, (unsigned long long)queue);
|
|
}
|
|
vk->vkQueueEndDebugUtilsLabelEXT(unboxed_queue);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueEndDebugUtilsLabelEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueInsertDebugUtilsLabelEXT: {
|
|
android::base::beginTrace("vkQueueInsertDebugUtilsLabelEXT decode");
|
|
VkQueue queue;
|
|
const VkDebugUtilsLabelEXT* pLabelInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
auto unboxed_queue = unbox_VkQueue(queue);
|
|
auto vk = dispatch_VkQueue(queue);
|
|
// End manual dispatchable handle unboxing for queue;
|
|
vkReadStream->alloc((void**)&pLabelInfo, sizeof(const VkDebugUtilsLabelEXT));
|
|
reservedunmarshal_VkDebugUtilsLabelEXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo),
|
|
readStreamPtrPtr);
|
|
if (pLabelInfo) {
|
|
transform_tohost_VkDebugUtilsLabelEXT(m_state,
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkQueueInsertDebugUtilsLabelEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)pLabelInfo);
|
|
}
|
|
vk->vkQueueInsertDebugUtilsLabelEXT(unboxed_queue, pLabelInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueInsertDebugUtilsLabelEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue, pLabelInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBeginDebugUtilsLabelEXT: {
|
|
android::base::beginTrace("vkCmdBeginDebugUtilsLabelEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkDebugUtilsLabelEXT* pLabelInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pLabelInfo, sizeof(const VkDebugUtilsLabelEXT));
|
|
reservedunmarshal_VkDebugUtilsLabelEXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo),
|
|
readStreamPtrPtr);
|
|
if (pLabelInfo) {
|
|
transform_tohost_VkDebugUtilsLabelEXT(m_state,
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdBeginDebugUtilsLabelEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pLabelInfo);
|
|
}
|
|
vk->vkCmdBeginDebugUtilsLabelEXT(unboxed_commandBuffer, pLabelInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBeginDebugUtilsLabelEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, pLabelInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdEndDebugUtilsLabelEXT: {
|
|
android::base::beginTrace("vkCmdEndDebugUtilsLabelEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdEndDebugUtilsLabelEXT 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer);
|
|
}
|
|
vk->vkCmdEndDebugUtilsLabelEXT(unboxed_commandBuffer);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdEndDebugUtilsLabelEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdInsertDebugUtilsLabelEXT: {
|
|
android::base::beginTrace("vkCmdInsertDebugUtilsLabelEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkDebugUtilsLabelEXT* pLabelInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pLabelInfo, sizeof(const VkDebugUtilsLabelEXT));
|
|
reservedunmarshal_VkDebugUtilsLabelEXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo),
|
|
readStreamPtrPtr);
|
|
if (pLabelInfo) {
|
|
transform_tohost_VkDebugUtilsLabelEXT(m_state,
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdInsertDebugUtilsLabelEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pLabelInfo);
|
|
}
|
|
vk->vkCmdInsertDebugUtilsLabelEXT(unboxed_commandBuffer, pLabelInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdInsertDebugUtilsLabelEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, pLabelInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateDebugUtilsMessengerEXT: {
|
|
android::base::beginTrace("vkCreateDebugUtilsMessengerEXT decode");
|
|
VkInstance instance;
|
|
const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkDebugUtilsMessengerEXT* pMessenger;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkDebugUtilsMessengerCreateInfoEXT));
|
|
reservedunmarshal_VkDebugUtilsMessengerCreateInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugUtilsMessengerCreateInfoEXT*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pMessenger;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMessenger, sizeof(VkDebugUtilsMessengerEXT));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDebugUtilsMessengerEXT*)pMessenger =
|
|
(VkDebugUtilsMessengerEXT)(VkDebugUtilsMessengerEXT)((
|
|
VkDebugUtilsMessengerEXT)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDebugUtilsMessengerCreateInfoEXT(
|
|
m_state, (VkDebugUtilsMessengerCreateInfoEXT*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateDebugUtilsMessengerEXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pMessenger);
|
|
}
|
|
VkResult vkCreateDebugUtilsMessengerEXT_VkResult_return = (VkResult)0;
|
|
vkCreateDebugUtilsMessengerEXT_VkResult_return = vk->vkCreateDebugUtilsMessengerEXT(
|
|
unboxed_instance, pCreateInfo, pAllocator, pMessenger);
|
|
if ((vkCreateDebugUtilsMessengerEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDebugUtilsMessengerEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pMessenger;
|
|
if (vkCreateDebugUtilsMessengerEXT_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkDebugUtilsMessengerEXT),
|
|
"handle map overwrite requires VkDebugUtilsMessengerEXT to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkDebugUtilsMessengerEXT(
|
|
(VkDebugUtilsMessengerEXT*)pMessenger, 1);
|
|
vkStream->write((VkDebugUtilsMessengerEXT*)pMessenger, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pMessenger;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateDebugUtilsMessengerEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDebugUtilsMessengerEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDebugUtilsMessengerEXT_VkResult_return, instance, pCreateInfo,
|
|
pAllocator, pMessenger);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyDebugUtilsMessengerEXT: {
|
|
android::base::beginTrace("vkDestroyDebugUtilsMessengerEXT decode");
|
|
VkInstance instance;
|
|
VkDebugUtilsMessengerEXT messenger;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
// Begin manual non dispatchable handle destroy unboxing for messenger;
|
|
VkDebugUtilsMessengerEXT boxed_messenger_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDebugUtilsMessengerEXT*)&messenger =
|
|
(VkDebugUtilsMessengerEXT)(VkDebugUtilsMessengerEXT)((
|
|
VkDebugUtilsMessengerEXT)(*&cgen_var_1));
|
|
boxed_messenger_preserve = messenger;
|
|
messenger = unbox_VkDebugUtilsMessengerEXT(messenger);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkDestroyDebugUtilsMessengerEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)messenger,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyDebugUtilsMessengerEXT(unboxed_instance, messenger, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyDebugUtilsMessengerEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, instance,
|
|
boxed_messenger_preserve, pAllocator);
|
|
}
|
|
delete_VkDebugUtilsMessengerEXT(boxed_messenger_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkSubmitDebugUtilsMessageEXT: {
|
|
android::base::beginTrace("vkSubmitDebugUtilsMessageEXT decode");
|
|
VkInstance instance;
|
|
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity;
|
|
VkDebugUtilsMessageTypeFlagsEXT messageTypes;
|
|
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
memcpy((VkDebugUtilsMessageSeverityFlagBitsEXT*)&messageSeverity, *readStreamPtrPtr,
|
|
sizeof(VkDebugUtilsMessageSeverityFlagBitsEXT));
|
|
*readStreamPtrPtr += sizeof(VkDebugUtilsMessageSeverityFlagBitsEXT);
|
|
memcpy((VkDebugUtilsMessageTypeFlagsEXT*)&messageTypes, *readStreamPtrPtr,
|
|
sizeof(VkDebugUtilsMessageTypeFlagsEXT));
|
|
*readStreamPtrPtr += sizeof(VkDebugUtilsMessageTypeFlagsEXT);
|
|
vkReadStream->alloc((void**)&pCallbackData,
|
|
sizeof(const VkDebugUtilsMessengerCallbackDataEXT));
|
|
reservedunmarshal_VkDebugUtilsMessengerCallbackDataEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDebugUtilsMessengerCallbackDataEXT*)(pCallbackData), readStreamPtrPtr);
|
|
if (pCallbackData) {
|
|
transform_tohost_VkDebugUtilsMessengerCallbackDataEXT(
|
|
m_state, (VkDebugUtilsMessengerCallbackDataEXT*)(pCallbackData));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkSubmitDebugUtilsMessageEXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)instance,
|
|
(unsigned long long)messageSeverity, (unsigned long long)messageTypes,
|
|
(unsigned long long)pCallbackData);
|
|
}
|
|
vk->vkSubmitDebugUtilsMessageEXT(unboxed_instance, messageSeverity, messageTypes,
|
|
pCallbackData);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSubmitDebugUtilsMessageEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, instance, messageSeverity,
|
|
messageTypes, pCallbackData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_ANDROID_external_memory_android_hardware_buffer
|
|
case OP_vkGetAndroidHardwareBufferPropertiesANDROID: {
|
|
android::base::beginTrace("vkGetAndroidHardwareBufferPropertiesANDROID decode");
|
|
VkDevice device;
|
|
const AHardwareBuffer* buffer;
|
|
VkAndroidHardwareBufferPropertiesANDROID* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&buffer, sizeof(const AHardwareBuffer));
|
|
memcpy((AHardwareBuffer*)buffer, *readStreamPtrPtr, sizeof(const AHardwareBuffer));
|
|
*readStreamPtrPtr += sizeof(const AHardwareBuffer);
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
sizeof(VkAndroidHardwareBufferPropertiesANDROID));
|
|
reservedunmarshal_VkAndroidHardwareBufferPropertiesANDROID(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAndroidHardwareBufferPropertiesANDROID*)(pProperties), readStreamPtrPtr);
|
|
if (pProperties) {
|
|
transform_tohost_VkAndroidHardwareBufferPropertiesANDROID(
|
|
m_state, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetAndroidHardwareBufferPropertiesANDROID 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)buffer,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = (VkResult)0;
|
|
vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return =
|
|
vk->vkGetAndroidHardwareBufferPropertiesANDROID(unboxed_device, buffer,
|
|
pProperties);
|
|
if ((vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pProperties) {
|
|
transform_fromhost_VkAndroidHardwareBufferPropertiesANDROID(
|
|
m_state, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
|
|
}
|
|
marshal_VkAndroidHardwareBufferPropertiesANDROID(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
|
|
vkStream->write(&vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetAndroidHardwareBufferPropertiesANDROID(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return, device, buffer,
|
|
pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetMemoryAndroidHardwareBufferANDROID: {
|
|
android::base::beginTrace("vkGetMemoryAndroidHardwareBufferANDROID decode");
|
|
VkDevice device;
|
|
const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo;
|
|
AHardwareBuffer** pBuffer;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkMemoryGetAndroidHardwareBufferInfoANDROID));
|
|
reservedunmarshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryGetAndroidHardwareBufferInfoANDROID*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pBuffer;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pBuffer, sizeof(AHardwareBuffer*));
|
|
memcpy((AHardwareBuffer**)pBuffer, *readStreamPtrPtr, sizeof(AHardwareBuffer*));
|
|
*readStreamPtrPtr += sizeof(AHardwareBuffer*);
|
|
if (pInfo) {
|
|
transform_tohost_VkMemoryGetAndroidHardwareBufferInfoANDROID(
|
|
m_state, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetMemoryAndroidHardwareBufferANDROID 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pBuffer);
|
|
}
|
|
VkResult vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = (VkResult)0;
|
|
vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return =
|
|
vk->vkGetMemoryAndroidHardwareBufferANDROID(unboxed_device, pInfo, pBuffer);
|
|
if ((vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((AHardwareBuffer**)pBuffer, sizeof(AHardwareBuffer*));
|
|
vkStream->write(&vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryAndroidHardwareBufferANDROID(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return, device, pInfo,
|
|
pBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_sampler_filter_minmax
|
|
#endif
|
|
#ifdef VK_AMD_gpu_shader_int16
|
|
#endif
|
|
#ifdef VK_AMD_mixed_attachment_samples
|
|
#endif
|
|
#ifdef VK_AMD_shader_fragment_mask
|
|
#endif
|
|
#ifdef VK_EXT_inline_uniform_block
|
|
#endif
|
|
#ifdef VK_EXT_shader_stencil_export
|
|
#endif
|
|
#ifdef VK_EXT_sample_locations
|
|
case OP_vkCmdSetSampleLocationsEXT: {
|
|
android::base::beginTrace("vkCmdSetSampleLocationsEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkSampleLocationsInfoEXT* pSampleLocationsInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pSampleLocationsInfo,
|
|
sizeof(const VkSampleLocationsInfoEXT));
|
|
reservedunmarshal_VkSampleLocationsInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSampleLocationsInfoEXT*)(pSampleLocationsInfo), readStreamPtrPtr);
|
|
if (pSampleLocationsInfo) {
|
|
transform_tohost_VkSampleLocationsInfoEXT(
|
|
m_state, (VkSampleLocationsInfoEXT*)(pSampleLocationsInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetSampleLocationsEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pSampleLocationsInfo);
|
|
}
|
|
vk->vkCmdSetSampleLocationsEXT(unboxed_commandBuffer, pSampleLocationsInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetSampleLocationsEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pSampleLocationsInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceMultisamplePropertiesEXT: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceMultisamplePropertiesEXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkSampleCountFlagBits samples;
|
|
VkMultisamplePropertiesEXT* pMultisampleProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((VkSampleCountFlagBits*)&samples, *readStreamPtrPtr,
|
|
sizeof(VkSampleCountFlagBits));
|
|
*readStreamPtrPtr += sizeof(VkSampleCountFlagBits);
|
|
// Begin manual dispatchable handle unboxing for pMultisampleProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMultisampleProperties,
|
|
sizeof(VkMultisamplePropertiesEXT));
|
|
reservedunmarshal_VkMultisamplePropertiesEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMultisamplePropertiesEXT*)(pMultisampleProperties), readStreamPtrPtr);
|
|
if (pMultisampleProperties) {
|
|
transform_tohost_VkMultisamplePropertiesEXT(
|
|
m_state, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceMultisamplePropertiesEXT 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)samples,
|
|
(unsigned long long)pMultisampleProperties);
|
|
}
|
|
vk->vkGetPhysicalDeviceMultisamplePropertiesEXT(unboxed_physicalDevice, samples,
|
|
pMultisampleProperties);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMultisampleProperties) {
|
|
transform_fromhost_VkMultisamplePropertiesEXT(
|
|
m_state, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
|
|
}
|
|
marshal_VkMultisamplePropertiesEXT(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMultisamplePropertiesEXT*)(pMultisampleProperties));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceMultisamplePropertiesEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, physicalDevice, samples,
|
|
pMultisampleProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_blend_operation_advanced
|
|
#endif
|
|
#ifdef VK_NV_fragment_coverage_to_color
|
|
#endif
|
|
#ifdef VK_NV_framebuffer_mixed_samples
|
|
#endif
|
|
#ifdef VK_NV_fill_rectangle
|
|
#endif
|
|
#ifdef VK_NV_shader_sm_builtins
|
|
#endif
|
|
#ifdef VK_EXT_post_depth_coverage
|
|
#endif
|
|
#ifdef VK_EXT_image_drm_format_modifier
|
|
case OP_vkGetImageDrmFormatModifierPropertiesEXT: {
|
|
android::base::beginTrace("vkGetImageDrmFormatModifierPropertiesEXT decode");
|
|
VkDevice device;
|
|
VkImage image;
|
|
VkImageDrmFormatModifierPropertiesEXT* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
sizeof(VkImageDrmFormatModifierPropertiesEXT));
|
|
reservedunmarshal_VkImageDrmFormatModifierPropertiesEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageDrmFormatModifierPropertiesEXT*)(pProperties), readStreamPtrPtr);
|
|
if (pProperties) {
|
|
transform_tohost_VkImageDrmFormatModifierPropertiesEXT(
|
|
m_state, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetImageDrmFormatModifierPropertiesEXT 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)image,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return = (VkResult)0;
|
|
vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return =
|
|
vk->vkGetImageDrmFormatModifierPropertiesEXT(unboxed_device, image,
|
|
pProperties);
|
|
if ((vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pProperties) {
|
|
transform_fromhost_VkImageDrmFormatModifierPropertiesEXT(
|
|
m_state, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
|
|
}
|
|
marshal_VkImageDrmFormatModifierPropertiesEXT(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
|
|
vkStream->write(&vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetImageDrmFormatModifierPropertiesEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return, device, image,
|
|
pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_validation_cache
|
|
case OP_vkCreateValidationCacheEXT: {
|
|
android::base::beginTrace("vkCreateValidationCacheEXT decode");
|
|
VkDevice device;
|
|
const VkValidationCacheCreateInfoEXT* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkValidationCacheEXT* pValidationCache;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkValidationCacheCreateInfoEXT));
|
|
reservedunmarshal_VkValidationCacheCreateInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkValidationCacheCreateInfoEXT*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pValidationCache;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pValidationCache, sizeof(VkValidationCacheEXT));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkValidationCacheEXT*)pValidationCache =
|
|
(VkValidationCacheEXT)(VkValidationCacheEXT)((
|
|
VkValidationCacheEXT)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkValidationCacheCreateInfoEXT(
|
|
m_state, (VkValidationCacheCreateInfoEXT*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreateValidationCacheEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pValidationCache);
|
|
}
|
|
VkResult vkCreateValidationCacheEXT_VkResult_return = (VkResult)0;
|
|
vkCreateValidationCacheEXT_VkResult_return = vk->vkCreateValidationCacheEXT(
|
|
unboxed_device, pCreateInfo, pAllocator, pValidationCache);
|
|
if ((vkCreateValidationCacheEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateValidationCacheEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pValidationCache;
|
|
if (vkCreateValidationCacheEXT_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkValidationCacheEXT),
|
|
"handle map overwrite requires VkValidationCacheEXT to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkValidationCacheEXT(
|
|
(VkValidationCacheEXT*)pValidationCache, 1);
|
|
vkStream->write((VkValidationCacheEXT*)pValidationCache, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pValidationCache;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateValidationCacheEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateValidationCacheEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateValidationCacheEXT_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pValidationCache);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyValidationCacheEXT: {
|
|
android::base::beginTrace("vkDestroyValidationCacheEXT decode");
|
|
VkDevice device;
|
|
VkValidationCacheEXT validationCache;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual non dispatchable handle destroy unboxing for validationCache;
|
|
VkValidationCacheEXT boxed_validationCache_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkValidationCacheEXT*)&validationCache =
|
|
(VkValidationCacheEXT)(VkValidationCacheEXT)((
|
|
VkValidationCacheEXT)(*&cgen_var_1));
|
|
boxed_validationCache_preserve = validationCache;
|
|
validationCache = unbox_VkValidationCacheEXT(validationCache);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyValidationCacheEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)validationCache, (unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyValidationCacheEXT(unboxed_device, validationCache, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyValidationCacheEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_validationCache_preserve, pAllocator);
|
|
}
|
|
delete_VkValidationCacheEXT(boxed_validationCache_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkMergeValidationCachesEXT: {
|
|
android::base::beginTrace("vkMergeValidationCachesEXT decode");
|
|
VkDevice device;
|
|
VkValidationCacheEXT dstCache;
|
|
uint32_t srcCacheCount;
|
|
const VkValidationCacheEXT* pSrcCaches;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkValidationCacheEXT*)&dstCache =
|
|
(VkValidationCacheEXT)unbox_VkValidationCacheEXT(
|
|
(VkValidationCacheEXT)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&srcCacheCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pSrcCaches,
|
|
((srcCacheCount)) * sizeof(const VkValidationCacheEXT));
|
|
if (((srcCacheCount))) {
|
|
uint8_t* cgen_var_2_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((srcCacheCount));
|
|
for (uint32_t k = 0; k < ((srcCacheCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_2_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkValidationCacheEXT*)pSrcCaches) + k) =
|
|
(VkValidationCacheEXT)unbox_VkValidationCacheEXT(
|
|
(VkValidationCacheEXT)tmpval);
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkMergeValidationCachesEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)dstCache,
|
|
(unsigned long long)srcCacheCount, (unsigned long long)pSrcCaches);
|
|
}
|
|
VkResult vkMergeValidationCachesEXT_VkResult_return = (VkResult)0;
|
|
vkMergeValidationCachesEXT_VkResult_return = vk->vkMergeValidationCachesEXT(
|
|
unboxed_device, dstCache, srcCacheCount, pSrcCaches);
|
|
if ((vkMergeValidationCachesEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkMergeValidationCachesEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkMergeValidationCachesEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkMergeValidationCachesEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkMergeValidationCachesEXT_VkResult_return, device, dstCache, srcCacheCount,
|
|
pSrcCaches);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetValidationCacheDataEXT: {
|
|
android::base::beginTrace("vkGetValidationCacheDataEXT decode");
|
|
VkDevice device;
|
|
VkValidationCacheEXT validationCache;
|
|
size_t* pDataSize;
|
|
void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkValidationCacheEXT*)&validationCache =
|
|
(VkValidationCacheEXT)unbox_VkValidationCacheEXT(
|
|
(VkValidationCacheEXT)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pDataSize;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((size_t**)&pDataSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pDataSize);
|
|
*readStreamPtrPtr += 8;
|
|
if (pDataSize) {
|
|
vkReadStream->alloc((void**)&pDataSize, sizeof(size_t));
|
|
memcpy((size_t*)&(*pDataSize), (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pDataSize));
|
|
*readStreamPtrPtr += 8;
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pData;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((void**)&pData, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pData);
|
|
*readStreamPtrPtr += 8;
|
|
if (pData) {
|
|
vkReadStream->alloc((void**)&pData, (*(pDataSize)) * sizeof(uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, (*(pDataSize)) * sizeof(uint8_t));
|
|
*readStreamPtrPtr += (*(pDataSize)) * sizeof(uint8_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetValidationCacheDataEXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)validationCache, (unsigned long long)pDataSize,
|
|
(unsigned long long)pData);
|
|
}
|
|
VkResult vkGetValidationCacheDataEXT_VkResult_return = (VkResult)0;
|
|
vkGetValidationCacheDataEXT_VkResult_return = vk->vkGetValidationCacheDataEXT(
|
|
unboxed_device, validationCache, pDataSize, pData);
|
|
if ((vkGetValidationCacheDataEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetValidationCacheDataEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pDataSize;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pDataSize) {
|
|
uint64_t cgen_var_4_0 = (uint64_t)(*pDataSize);
|
|
vkStream->putBe64(cgen_var_4_0);
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pData;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pData) {
|
|
vkStream->write((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
|
|
}
|
|
vkStream->write(&vkGetValidationCacheDataEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetValidationCacheDataEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetValidationCacheDataEXT_VkResult_return, device, validationCache,
|
|
pDataSize, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_descriptor_indexing
|
|
#endif
|
|
#ifdef VK_EXT_shader_viewport_index_layer
|
|
#endif
|
|
#ifdef VK_NV_shading_rate_image
|
|
case OP_vkCmdBindShadingRateImageNV: {
|
|
android::base::beginTrace("vkCmdBindShadingRateImageNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkImageView imageView;
|
|
VkImageLayout imageLayout;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImageView*)&imageView =
|
|
(VkImageView)unbox_VkImageView((VkImageView)(*&cgen_var_1));
|
|
memcpy((VkImageLayout*)&imageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBindShadingRateImageNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)imageView, (unsigned long long)imageLayout);
|
|
}
|
|
vk->vkCmdBindShadingRateImageNV(unboxed_commandBuffer, imageView, imageLayout);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBindShadingRateImageNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, imageView,
|
|
imageLayout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetViewportShadingRatePaletteNV: {
|
|
android::base::beginTrace("vkCmdSetViewportShadingRatePaletteNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstViewport;
|
|
uint32_t viewportCount;
|
|
const VkShadingRatePaletteNV* pShadingRatePalettes;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstViewport, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&viewportCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pShadingRatePalettes,
|
|
((viewportCount)) * sizeof(const VkShadingRatePaletteNV));
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
|
reservedunmarshal_VkShadingRatePaletteNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkShadingRatePaletteNV*)(pShadingRatePalettes + i), readStreamPtrPtr);
|
|
}
|
|
if (pShadingRatePalettes) {
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
|
transform_tohost_VkShadingRatePaletteNV(
|
|
m_state, (VkShadingRatePaletteNV*)(pShadingRatePalettes + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetViewportShadingRatePaletteNV 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstViewport, (unsigned long long)viewportCount,
|
|
(unsigned long long)pShadingRatePalettes);
|
|
}
|
|
vk->vkCmdSetViewportShadingRatePaletteNV(unboxed_commandBuffer, firstViewport,
|
|
viewportCount, pShadingRatePalettes);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetViewportShadingRatePaletteNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
firstViewport, viewportCount, pShadingRatePalettes);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetCoarseSampleOrderNV: {
|
|
android::base::beginTrace("vkCmdSetCoarseSampleOrderNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkCoarseSampleOrderTypeNV sampleOrderType;
|
|
uint32_t customSampleOrderCount;
|
|
const VkCoarseSampleOrderCustomNV* pCustomSampleOrders;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkCoarseSampleOrderTypeNV*)&sampleOrderType, *readStreamPtrPtr,
|
|
sizeof(VkCoarseSampleOrderTypeNV));
|
|
*readStreamPtrPtr += sizeof(VkCoarseSampleOrderTypeNV);
|
|
memcpy((uint32_t*)&customSampleOrderCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pCustomSampleOrders,
|
|
((customSampleOrderCount)) * sizeof(const VkCoarseSampleOrderCustomNV));
|
|
for (uint32_t i = 0; i < (uint32_t)((customSampleOrderCount)); ++i) {
|
|
reservedunmarshal_VkCoarseSampleOrderCustomNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCoarseSampleOrderCustomNV*)(pCustomSampleOrders + i), readStreamPtrPtr);
|
|
}
|
|
if (pCustomSampleOrders) {
|
|
for (uint32_t i = 0; i < (uint32_t)((customSampleOrderCount)); ++i) {
|
|
transform_tohost_VkCoarseSampleOrderCustomNV(
|
|
m_state, (VkCoarseSampleOrderCustomNV*)(pCustomSampleOrders + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetCoarseSampleOrderNV 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)sampleOrderType,
|
|
(unsigned long long)customSampleOrderCount,
|
|
(unsigned long long)pCustomSampleOrders);
|
|
}
|
|
vk->vkCmdSetCoarseSampleOrderNV(unboxed_commandBuffer, sampleOrderType,
|
|
customSampleOrderCount, pCustomSampleOrders);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetCoarseSampleOrderNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_ray_tracing
|
|
case OP_vkCreateAccelerationStructureNV: {
|
|
android::base::beginTrace("vkCreateAccelerationStructureNV decode");
|
|
VkDevice device;
|
|
const VkAccelerationStructureCreateInfoNV* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkAccelerationStructureNV* pAccelerationStructure;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkAccelerationStructureCreateInfoNV));
|
|
reservedunmarshal_VkAccelerationStructureCreateInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureCreateInfoNV*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pAccelerationStructure;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pAccelerationStructure,
|
|
sizeof(VkAccelerationStructureNV));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkAccelerationStructureNV*)pAccelerationStructure =
|
|
(VkAccelerationStructureNV)(VkAccelerationStructureNV)((
|
|
VkAccelerationStructureNV)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkAccelerationStructureCreateInfoNV(
|
|
m_state, (VkAccelerationStructureCreateInfoNV*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateAccelerationStructureNV 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator,
|
|
(unsigned long long)pAccelerationStructure);
|
|
}
|
|
VkResult vkCreateAccelerationStructureNV_VkResult_return = (VkResult)0;
|
|
vkCreateAccelerationStructureNV_VkResult_return =
|
|
vk->vkCreateAccelerationStructureNV(unboxed_device, pCreateInfo, pAllocator,
|
|
pAccelerationStructure);
|
|
if ((vkCreateAccelerationStructureNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateAccelerationStructureNV_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pAccelerationStructure;
|
|
if (vkCreateAccelerationStructureNV_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkAccelerationStructureNV),
|
|
"handle map overwrite requires VkAccelerationStructureNV to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkAccelerationStructureNV(
|
|
(VkAccelerationStructureNV*)pAccelerationStructure, 1);
|
|
vkStream->write((VkAccelerationStructureNV*)pAccelerationStructure, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pAccelerationStructure;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateAccelerationStructureNV_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateAccelerationStructureNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateAccelerationStructureNV_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pAccelerationStructure);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyAccelerationStructureNV: {
|
|
android::base::beginTrace("vkDestroyAccelerationStructureNV decode");
|
|
VkDevice device;
|
|
VkAccelerationStructureNV accelerationStructure;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual non dispatchable handle destroy unboxing for accelerationStructure;
|
|
VkAccelerationStructureNV boxed_accelerationStructure_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkAccelerationStructureNV*)&accelerationStructure =
|
|
(VkAccelerationStructureNV)(VkAccelerationStructureNV)((
|
|
VkAccelerationStructureNV)(*&cgen_var_1));
|
|
boxed_accelerationStructure_preserve = accelerationStructure;
|
|
accelerationStructure = unbox_VkAccelerationStructureNV(accelerationStructure);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkDestroyAccelerationStructureNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)accelerationStructure, (unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyAccelerationStructureNV(unboxed_device, accelerationStructure,
|
|
pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyAccelerationStructureNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_accelerationStructure_preserve, pAllocator);
|
|
}
|
|
delete_VkAccelerationStructureNV(boxed_accelerationStructure_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetAccelerationStructureMemoryRequirementsNV: {
|
|
android::base::beginTrace("vkGetAccelerationStructureMemoryRequirementsNV decode");
|
|
VkDevice device;
|
|
const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo;
|
|
VkMemoryRequirements2KHR* pMemoryRequirements;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkAccelerationStructureMemoryRequirementsInfoNV));
|
|
reservedunmarshal_VkAccelerationStructureMemoryRequirementsInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureMemoryRequirementsInfoNV*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements2KHR));
|
|
reservedunmarshal_VkMemoryRequirements2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2KHR*)(pMemoryRequirements), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkAccelerationStructureMemoryRequirementsInfoNV(
|
|
m_state, (VkAccelerationStructureMemoryRequirementsInfoNV*)(pInfo));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements2KHR(
|
|
m_state, (VkMemoryRequirements2KHR*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetAccelerationStructureMemoryRequirementsNV 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
vk->vkGetAccelerationStructureMemoryRequirementsNV(unboxed_device, pInfo,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements2KHR(
|
|
m_state, (VkMemoryRequirements2KHR*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements2KHR(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2KHR*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetAccelerationStructureMemoryRequirementsNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBindAccelerationStructureMemoryNV: {
|
|
android::base::beginTrace("vkBindAccelerationStructureMemoryNV decode");
|
|
VkDevice device;
|
|
uint32_t bindInfoCount;
|
|
const VkBindAccelerationStructureMemoryInfoNV* pBindInfos;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)&bindInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pBindInfos,
|
|
((bindInfoCount)) * sizeof(const VkBindAccelerationStructureMemoryInfoNV));
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
reservedunmarshal_VkBindAccelerationStructureMemoryInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBindAccelerationStructureMemoryInfoNV*)(pBindInfos + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pBindInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
transform_tohost_VkBindAccelerationStructureMemoryInfoNV(
|
|
m_state, (VkBindAccelerationStructureMemoryInfoNV*)(pBindInfos + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkBindAccelerationStructureMemoryNV 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)bindInfoCount,
|
|
(unsigned long long)pBindInfos);
|
|
}
|
|
VkResult vkBindAccelerationStructureMemoryNV_VkResult_return = (VkResult)0;
|
|
vkBindAccelerationStructureMemoryNV_VkResult_return =
|
|
vk->vkBindAccelerationStructureMemoryNV(unboxed_device, bindInfoCount,
|
|
pBindInfos);
|
|
if ((vkBindAccelerationStructureMemoryNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBindAccelerationStructureMemoryNV_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBindAccelerationStructureMemoryNV_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBindAccelerationStructureMemoryNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBindAccelerationStructureMemoryNV_VkResult_return, device, bindInfoCount,
|
|
pBindInfos);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBuildAccelerationStructureNV: {
|
|
android::base::beginTrace("vkCmdBuildAccelerationStructureNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkAccelerationStructureInfoNV* pInfo;
|
|
VkBuffer instanceData;
|
|
VkDeviceSize instanceOffset;
|
|
VkBool32 update;
|
|
VkAccelerationStructureNV dst;
|
|
VkAccelerationStructureNV src;
|
|
VkBuffer scratch;
|
|
VkDeviceSize scratchOffset;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkAccelerationStructureInfoNV));
|
|
reservedunmarshal_VkAccelerationStructureInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureInfoNV*)(pInfo), readStreamPtrPtr);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&instanceData = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&instanceOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkBool32*)&update, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkAccelerationStructureNV*)&dst =
|
|
(VkAccelerationStructureNV)unbox_VkAccelerationStructureNV(
|
|
(VkAccelerationStructureNV)(*&cgen_var_2));
|
|
uint64_t cgen_var_3;
|
|
memcpy((uint64_t*)&cgen_var_3, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkAccelerationStructureNV*)&src =
|
|
(VkAccelerationStructureNV)unbox_VkAccelerationStructureNV(
|
|
(VkAccelerationStructureNV)(*&cgen_var_3));
|
|
uint64_t cgen_var_4;
|
|
memcpy((uint64_t*)&cgen_var_4, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&scratch = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_4));
|
|
memcpy((VkDeviceSize*)&scratchOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
if (pInfo) {
|
|
transform_tohost_VkAccelerationStructureInfoNV(
|
|
m_state, (VkAccelerationStructureInfoNV*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBuildAccelerationStructureNV 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)pInfo,
|
|
(unsigned long long)instanceData, (unsigned long long)instanceOffset,
|
|
(unsigned long long)update, (unsigned long long)dst,
|
|
(unsigned long long)src, (unsigned long long)scratch,
|
|
(unsigned long long)scratchOffset);
|
|
}
|
|
vk->vkCmdBuildAccelerationStructureNV(unboxed_commandBuffer, pInfo, instanceData,
|
|
instanceOffset, update, dst, src, scratch,
|
|
scratchOffset);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBuildAccelerationStructureNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, pInfo,
|
|
instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyAccelerationStructureNV: {
|
|
android::base::beginTrace("vkCmdCopyAccelerationStructureNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkAccelerationStructureNV dst;
|
|
VkAccelerationStructureNV src;
|
|
VkCopyAccelerationStructureModeKHR mode;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkAccelerationStructureNV*)&dst =
|
|
(VkAccelerationStructureNV)unbox_VkAccelerationStructureNV(
|
|
(VkAccelerationStructureNV)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkAccelerationStructureNV*)&src =
|
|
(VkAccelerationStructureNV)unbox_VkAccelerationStructureNV(
|
|
(VkAccelerationStructureNV)(*&cgen_var_2));
|
|
memcpy((VkCopyAccelerationStructureModeKHR*)&mode, *readStreamPtrPtr,
|
|
sizeof(VkCopyAccelerationStructureModeKHR));
|
|
*readStreamPtrPtr += sizeof(VkCopyAccelerationStructureModeKHR);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdCopyAccelerationStructureNV 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)dst,
|
|
(unsigned long long)src, (unsigned long long)mode);
|
|
}
|
|
vk->vkCmdCopyAccelerationStructureNV(unboxed_commandBuffer, dst, src, mode);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyAccelerationStructureNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, dst, src,
|
|
mode);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdTraceRaysNV: {
|
|
android::base::beginTrace("vkCmdTraceRaysNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer raygenShaderBindingTableBuffer;
|
|
VkDeviceSize raygenShaderBindingOffset;
|
|
VkBuffer missShaderBindingTableBuffer;
|
|
VkDeviceSize missShaderBindingOffset;
|
|
VkDeviceSize missShaderBindingStride;
|
|
VkBuffer hitShaderBindingTableBuffer;
|
|
VkDeviceSize hitShaderBindingOffset;
|
|
VkDeviceSize hitShaderBindingStride;
|
|
VkBuffer callableShaderBindingTableBuffer;
|
|
VkDeviceSize callableShaderBindingOffset;
|
|
VkDeviceSize callableShaderBindingStride;
|
|
uint32_t width;
|
|
uint32_t height;
|
|
uint32_t depth;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&raygenShaderBindingTableBuffer =
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&raygenShaderBindingOffset, *readStreamPtrPtr,
|
|
sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&missShaderBindingTableBuffer =
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&missShaderBindingOffset, *readStreamPtrPtr,
|
|
sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkDeviceSize*)&missShaderBindingStride, *readStreamPtrPtr,
|
|
sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_3;
|
|
memcpy((uint64_t*)&cgen_var_3, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&hitShaderBindingTableBuffer =
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_3));
|
|
memcpy((VkDeviceSize*)&hitShaderBindingOffset, *readStreamPtrPtr,
|
|
sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkDeviceSize*)&hitShaderBindingStride, *readStreamPtrPtr,
|
|
sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_4;
|
|
memcpy((uint64_t*)&cgen_var_4, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&callableShaderBindingTableBuffer =
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_4));
|
|
memcpy((VkDeviceSize*)&callableShaderBindingOffset, *readStreamPtrPtr,
|
|
sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkDeviceSize*)&callableShaderBindingStride, *readStreamPtrPtr,
|
|
sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&width, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&height, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&depth, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdTraceRaysNV 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)raygenShaderBindingTableBuffer,
|
|
(unsigned long long)raygenShaderBindingOffset,
|
|
(unsigned long long)missShaderBindingTableBuffer,
|
|
(unsigned long long)missShaderBindingOffset,
|
|
(unsigned long long)missShaderBindingStride,
|
|
(unsigned long long)hitShaderBindingTableBuffer,
|
|
(unsigned long long)hitShaderBindingOffset,
|
|
(unsigned long long)hitShaderBindingStride,
|
|
(unsigned long long)callableShaderBindingTableBuffer,
|
|
(unsigned long long)callableShaderBindingOffset,
|
|
(unsigned long long)callableShaderBindingStride, (unsigned long long)width,
|
|
(unsigned long long)height, (unsigned long long)depth);
|
|
}
|
|
vk->vkCmdTraceRaysNV(unboxed_commandBuffer, raygenShaderBindingTableBuffer,
|
|
raygenShaderBindingOffset, missShaderBindingTableBuffer,
|
|
missShaderBindingOffset, missShaderBindingStride,
|
|
hitShaderBindingTableBuffer, hitShaderBindingOffset,
|
|
hitShaderBindingStride, callableShaderBindingTableBuffer,
|
|
callableShaderBindingOffset, callableShaderBindingStride,
|
|
width, height, depth);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdTraceRaysNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
raygenShaderBindingTableBuffer, raygenShaderBindingOffset,
|
|
missShaderBindingTableBuffer, missShaderBindingOffset,
|
|
missShaderBindingStride, hitShaderBindingTableBuffer,
|
|
hitShaderBindingOffset, hitShaderBindingStride,
|
|
callableShaderBindingTableBuffer, callableShaderBindingOffset,
|
|
callableShaderBindingStride, width, height, depth);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateRayTracingPipelinesNV: {
|
|
android::base::beginTrace("vkCreateRayTracingPipelinesNV decode");
|
|
VkDevice device;
|
|
VkPipelineCache pipelineCache;
|
|
uint32_t createInfoCount;
|
|
const VkRayTracingPipelineCreateInfoNV* pCreateInfos;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkPipeline* pPipelines;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineCache*)&pipelineCache =
|
|
(VkPipelineCache)unbox_VkPipelineCache((VkPipelineCache)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&createInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pCreateInfos,
|
|
((createInfoCount)) * sizeof(const VkRayTracingPipelineCreateInfoNV));
|
|
for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
|
|
reservedunmarshal_VkRayTracingPipelineCreateInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRayTracingPipelineCreateInfoNV*)(pCreateInfos + i), readStreamPtrPtr);
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPipelines;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPipelines, ((createInfoCount)) * sizeof(VkPipeline));
|
|
if (((createInfoCount))) {
|
|
uint8_t* cgen_var_3_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((createInfoCount));
|
|
for (uint32_t k = 0; k < ((createInfoCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_3_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkPipeline*)pPipelines) + k) =
|
|
(VkPipeline)(VkPipeline)((VkPipeline)tmpval);
|
|
}
|
|
}
|
|
if (pCreateInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
|
|
transform_tohost_VkRayTracingPipelineCreateInfoNV(
|
|
m_state, (VkRayTracingPipelineCreateInfoNV*)(pCreateInfos + i));
|
|
}
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateRayTracingPipelinesNV 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipelineCache,
|
|
(unsigned long long)createInfoCount, (unsigned long long)pCreateInfos,
|
|
(unsigned long long)pAllocator, (unsigned long long)pPipelines);
|
|
}
|
|
VkResult vkCreateRayTracingPipelinesNV_VkResult_return = (VkResult)0;
|
|
vkCreateRayTracingPipelinesNV_VkResult_return = vk->vkCreateRayTracingPipelinesNV(
|
|
unboxed_device, pipelineCache, createInfoCount, pCreateInfos, pAllocator,
|
|
pPipelines);
|
|
if ((vkCreateRayTracingPipelinesNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateRayTracingPipelinesNV_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
if (((createInfoCount))) {
|
|
uint64_t* cgen_var_4;
|
|
vkStream->alloc((void**)&cgen_var_4, ((createInfoCount)) * 8);
|
|
vkStream->handleMapping()->mapHandles_VkPipeline_u64(pPipelines, cgen_var_4,
|
|
((createInfoCount)));
|
|
vkStream->write((uint64_t*)cgen_var_4, ((createInfoCount)) * 8);
|
|
}
|
|
vkStream->write(&vkCreateRayTracingPipelinesNV_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateRayTracingPipelinesNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateRayTracingPipelinesNV_VkResult_return, device, pipelineCache,
|
|
createInfoCount, pCreateInfos, pAllocator, pPipelines);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetRayTracingShaderGroupHandlesKHR: {
|
|
android::base::beginTrace("vkGetRayTracingShaderGroupHandlesKHR decode");
|
|
VkDevice device;
|
|
VkPipeline pipeline;
|
|
uint32_t firstGroup;
|
|
uint32_t groupCount;
|
|
size_t dataSize;
|
|
void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&firstGroup, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((size_t*)&dataSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&dataSize);
|
|
*readStreamPtrPtr += 8;
|
|
// Begin manual dispatchable handle unboxing for pData;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pData, ((dataSize)) * sizeof(uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, ((dataSize)) * sizeof(uint8_t));
|
|
*readStreamPtrPtr += ((dataSize)) * sizeof(uint8_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetRayTracingShaderGroupHandlesKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipeline,
|
|
(unsigned long long)firstGroup, (unsigned long long)groupCount,
|
|
(unsigned long long)dataSize, (unsigned long long)pData);
|
|
}
|
|
VkResult vkGetRayTracingShaderGroupHandlesKHR_VkResult_return = (VkResult)0;
|
|
vkGetRayTracingShaderGroupHandlesKHR_VkResult_return =
|
|
vk->vkGetRayTracingShaderGroupHandlesKHR(unboxed_device, pipeline, firstGroup,
|
|
groupCount, dataSize, pData);
|
|
if ((vkGetRayTracingShaderGroupHandlesKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetRayTracingShaderGroupHandlesKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void*)pData, ((dataSize)) * sizeof(uint8_t));
|
|
vkStream->write(&vkGetRayTracingShaderGroupHandlesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetRayTracingShaderGroupHandlesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetRayTracingShaderGroupHandlesKHR_VkResult_return, device, pipeline,
|
|
firstGroup, groupCount, dataSize, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetRayTracingShaderGroupHandlesNV: {
|
|
android::base::beginTrace("vkGetRayTracingShaderGroupHandlesNV decode");
|
|
VkDevice device;
|
|
VkPipeline pipeline;
|
|
uint32_t firstGroup;
|
|
uint32_t groupCount;
|
|
size_t dataSize;
|
|
void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&firstGroup, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((size_t*)&dataSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&dataSize);
|
|
*readStreamPtrPtr += 8;
|
|
// Begin manual dispatchable handle unboxing for pData;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pData, ((dataSize)) * sizeof(uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, ((dataSize)) * sizeof(uint8_t));
|
|
*readStreamPtrPtr += ((dataSize)) * sizeof(uint8_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetRayTracingShaderGroupHandlesNV 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipeline,
|
|
(unsigned long long)firstGroup, (unsigned long long)groupCount,
|
|
(unsigned long long)dataSize, (unsigned long long)pData);
|
|
}
|
|
VkResult vkGetRayTracingShaderGroupHandlesNV_VkResult_return = (VkResult)0;
|
|
vkGetRayTracingShaderGroupHandlesNV_VkResult_return =
|
|
vk->vkGetRayTracingShaderGroupHandlesNV(unboxed_device, pipeline, firstGroup,
|
|
groupCount, dataSize, pData);
|
|
if ((vkGetRayTracingShaderGroupHandlesNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetRayTracingShaderGroupHandlesNV_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void*)pData, ((dataSize)) * sizeof(uint8_t));
|
|
vkStream->write(&vkGetRayTracingShaderGroupHandlesNV_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetRayTracingShaderGroupHandlesNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetRayTracingShaderGroupHandlesNV_VkResult_return, device, pipeline,
|
|
firstGroup, groupCount, dataSize, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetAccelerationStructureHandleNV: {
|
|
android::base::beginTrace("vkGetAccelerationStructureHandleNV decode");
|
|
VkDevice device;
|
|
VkAccelerationStructureNV accelerationStructure;
|
|
size_t dataSize;
|
|
void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkAccelerationStructureNV*)&accelerationStructure =
|
|
(VkAccelerationStructureNV)unbox_VkAccelerationStructureNV(
|
|
(VkAccelerationStructureNV)(*&cgen_var_1));
|
|
memcpy((size_t*)&dataSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&dataSize);
|
|
*readStreamPtrPtr += 8;
|
|
// Begin manual dispatchable handle unboxing for pData;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pData, ((dataSize)) * sizeof(uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, ((dataSize)) * sizeof(uint8_t));
|
|
*readStreamPtrPtr += ((dataSize)) * sizeof(uint8_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetAccelerationStructureHandleNV 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)accelerationStructure, (unsigned long long)dataSize,
|
|
(unsigned long long)pData);
|
|
}
|
|
VkResult vkGetAccelerationStructureHandleNV_VkResult_return = (VkResult)0;
|
|
vkGetAccelerationStructureHandleNV_VkResult_return =
|
|
vk->vkGetAccelerationStructureHandleNV(unboxed_device, accelerationStructure,
|
|
dataSize, pData);
|
|
if ((vkGetAccelerationStructureHandleNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetAccelerationStructureHandleNV_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void*)pData, ((dataSize)) * sizeof(uint8_t));
|
|
vkStream->write(&vkGetAccelerationStructureHandleNV_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetAccelerationStructureHandleNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetAccelerationStructureHandleNV_VkResult_return, device,
|
|
accelerationStructure, dataSize, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdWriteAccelerationStructuresPropertiesNV: {
|
|
android::base::beginTrace("vkCmdWriteAccelerationStructuresPropertiesNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t accelerationStructureCount;
|
|
const VkAccelerationStructureNV* pAccelerationStructures;
|
|
VkQueryType queryType;
|
|
VkQueryPool queryPool;
|
|
uint32_t firstQuery;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&accelerationStructureCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pAccelerationStructures,
|
|
((accelerationStructureCount)) * sizeof(const VkAccelerationStructureNV));
|
|
if (((accelerationStructureCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((accelerationStructureCount));
|
|
for (uint32_t k = 0; k < ((accelerationStructureCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkAccelerationStructureNV*)pAccelerationStructures) + k) =
|
|
(VkAccelerationStructureNV)unbox_VkAccelerationStructureNV(
|
|
(VkAccelerationStructureNV)tmpval);
|
|
}
|
|
}
|
|
memcpy((VkQueryType*)&queryType, *readStreamPtrPtr, sizeof(VkQueryType));
|
|
*readStreamPtrPtr += sizeof(VkQueryType);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_2));
|
|
memcpy((uint32_t*)&firstQuery, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdWriteAccelerationStructuresPropertiesNV 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)accelerationStructureCount,
|
|
(unsigned long long)pAccelerationStructures,
|
|
(unsigned long long)queryType, (unsigned long long)queryPool,
|
|
(unsigned long long)firstQuery);
|
|
}
|
|
vk->vkCmdWriteAccelerationStructuresPropertiesNV(
|
|
unboxed_commandBuffer, accelerationStructureCount, pAccelerationStructures,
|
|
queryType, queryPool, firstQuery);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdWriteAccelerationStructuresPropertiesNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
accelerationStructureCount, pAccelerationStructures, queryType, queryPool,
|
|
firstQuery);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCompileDeferredNV: {
|
|
android::base::beginTrace("vkCompileDeferredNV decode");
|
|
VkDevice device;
|
|
VkPipeline pipeline;
|
|
uint32_t shader;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&shader, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCompileDeferredNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipeline,
|
|
(unsigned long long)shader);
|
|
}
|
|
VkResult vkCompileDeferredNV_VkResult_return = (VkResult)0;
|
|
vkCompileDeferredNV_VkResult_return =
|
|
vk->vkCompileDeferredNV(unboxed_device, pipeline, shader);
|
|
if ((vkCompileDeferredNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCompileDeferredNV_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkCompileDeferredNV_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCompileDeferredNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCompileDeferredNV_VkResult_return, device, pipeline, shader);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_representative_fragment_test
|
|
#endif
|
|
#ifdef VK_EXT_filter_cubic
|
|
#endif
|
|
#ifdef VK_QCOM_render_pass_shader_resolve
|
|
#endif
|
|
#ifdef VK_EXT_global_priority
|
|
#endif
|
|
#ifdef VK_EXT_external_memory_host
|
|
case OP_vkGetMemoryHostPointerPropertiesEXT: {
|
|
android::base::beginTrace("vkGetMemoryHostPointerPropertiesEXT decode");
|
|
VkDevice device;
|
|
VkExternalMemoryHandleTypeFlagBits handleType;
|
|
const void* pHostPointer;
|
|
VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkExternalMemoryHandleTypeFlagBits*)&handleType, *readStreamPtrPtr,
|
|
sizeof(VkExternalMemoryHandleTypeFlagBits));
|
|
*readStreamPtrPtr += sizeof(VkExternalMemoryHandleTypeFlagBits);
|
|
// WARNING PTR CHECK
|
|
memcpy((void**)&pHostPointer, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pHostPointer);
|
|
*readStreamPtrPtr += 8;
|
|
if (pHostPointer) {
|
|
vkReadStream->alloc((void**)&pHostPointer, sizeof(const uint8_t));
|
|
memcpy((void*)pHostPointer, *readStreamPtrPtr, sizeof(const uint8_t));
|
|
*readStreamPtrPtr += sizeof(const uint8_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pMemoryHostPointerProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryHostPointerProperties,
|
|
sizeof(VkMemoryHostPointerPropertiesEXT));
|
|
reservedunmarshal_VkMemoryHostPointerPropertiesEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties),
|
|
readStreamPtrPtr);
|
|
if (pMemoryHostPointerProperties) {
|
|
transform_tohost_VkMemoryHostPointerPropertiesEXT(
|
|
m_state, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetMemoryHostPointerPropertiesEXT 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)handleType,
|
|
(unsigned long long)pHostPointer,
|
|
(unsigned long long)pMemoryHostPointerProperties);
|
|
}
|
|
VkResult vkGetMemoryHostPointerPropertiesEXT_VkResult_return = (VkResult)0;
|
|
vkGetMemoryHostPointerPropertiesEXT_VkResult_return =
|
|
vk->vkGetMemoryHostPointerPropertiesEXT(
|
|
unboxed_device, handleType, pHostPointer, pMemoryHostPointerProperties);
|
|
if ((vkGetMemoryHostPointerPropertiesEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetMemoryHostPointerPropertiesEXT_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryHostPointerProperties) {
|
|
transform_fromhost_VkMemoryHostPointerPropertiesEXT(
|
|
m_state, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
|
|
}
|
|
marshal_VkMemoryHostPointerPropertiesEXT(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
|
|
vkStream->write(&vkGetMemoryHostPointerPropertiesEXT_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryHostPointerPropertiesEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryHostPointerPropertiesEXT_VkResult_return, device, handleType,
|
|
pHostPointer, pMemoryHostPointerProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_AMD_buffer_marker
|
|
case OP_vkCmdWriteBufferMarkerAMD: {
|
|
android::base::beginTrace("vkCmdWriteBufferMarkerAMD decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineStageFlagBits pipelineStage;
|
|
VkBuffer dstBuffer;
|
|
VkDeviceSize dstOffset;
|
|
uint32_t marker;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkPipelineStageFlagBits*)&pipelineStage, *readStreamPtrPtr,
|
|
sizeof(VkPipelineStageFlagBits));
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlagBits);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&dstOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&marker, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdWriteBufferMarkerAMD 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pipelineStage, (unsigned long long)dstBuffer,
|
|
(unsigned long long)dstOffset, (unsigned long long)marker);
|
|
}
|
|
vk->vkCmdWriteBufferMarkerAMD(unboxed_commandBuffer, pipelineStage, dstBuffer,
|
|
dstOffset, marker);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdWriteBufferMarkerAMD(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pipelineStage, dstBuffer, dstOffset, marker);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_AMD_pipeline_compiler_control
|
|
#endif
|
|
#ifdef VK_EXT_calibrated_timestamps
|
|
case OP_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceCalibrateableTimeDomainsEXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pTimeDomainCount;
|
|
VkTimeDomainEXT* pTimeDomains;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pTimeDomainCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pTimeDomainCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pTimeDomainCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pTimeDomainCount) {
|
|
vkReadStream->alloc((void**)&pTimeDomainCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pTimeDomainCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pTimeDomains;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkTimeDomainEXT**)&pTimeDomains, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pTimeDomains);
|
|
*readStreamPtrPtr += 8;
|
|
if (pTimeDomains) {
|
|
vkReadStream->alloc((void**)&pTimeDomains,
|
|
(*(pTimeDomainCount)) * sizeof(VkTimeDomainEXT));
|
|
memcpy((VkTimeDomainEXT*)pTimeDomains, *readStreamPtrPtr,
|
|
(*(pTimeDomainCount)) * sizeof(VkTimeDomainEXT));
|
|
*readStreamPtrPtr += (*(pTimeDomainCount)) * sizeof(VkTimeDomainEXT);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceCalibrateableTimeDomainsEXT 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pTimeDomainCount, (unsigned long long)pTimeDomains);
|
|
}
|
|
VkResult vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_VkResult_return =
|
|
(VkResult)0;
|
|
vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_VkResult_return =
|
|
vk->vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
|
|
unboxed_physicalDevice, pTimeDomainCount, pTimeDomains);
|
|
if ((vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pTimeDomainCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pTimeDomainCount) {
|
|
vkStream->write((uint32_t*)pTimeDomainCount, sizeof(uint32_t));
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pTimeDomains;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pTimeDomains) {
|
|
vkStream->write((VkTimeDomainEXT*)pTimeDomains,
|
|
(*(pTimeDomainCount)) * sizeof(VkTimeDomainEXT));
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceCalibrateableTimeDomainsEXT_VkResult_return,
|
|
physicalDevice, pTimeDomainCount, pTimeDomains);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetCalibratedTimestampsEXT: {
|
|
android::base::beginTrace("vkGetCalibratedTimestampsEXT decode");
|
|
VkDevice device;
|
|
uint32_t timestampCount;
|
|
const VkCalibratedTimestampInfoEXT* pTimestampInfos;
|
|
uint64_t* pTimestamps;
|
|
uint64_t* pMaxDeviation;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)×tampCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pTimestampInfos,
|
|
((timestampCount)) * sizeof(const VkCalibratedTimestampInfoEXT));
|
|
for (uint32_t i = 0; i < (uint32_t)((timestampCount)); ++i) {
|
|
reservedunmarshal_VkCalibratedTimestampInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCalibratedTimestampInfoEXT*)(pTimestampInfos + i), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pTimestamps;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pTimestamps, ((timestampCount)) * sizeof(uint64_t));
|
|
memcpy((uint64_t*)pTimestamps, *readStreamPtrPtr,
|
|
((timestampCount)) * sizeof(uint64_t));
|
|
*readStreamPtrPtr += ((timestampCount)) * sizeof(uint64_t);
|
|
// Begin manual dispatchable handle unboxing for pMaxDeviation;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMaxDeviation, sizeof(uint64_t));
|
|
memcpy((uint64_t*)pMaxDeviation, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (pTimestampInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((timestampCount)); ++i) {
|
|
transform_tohost_VkCalibratedTimestampInfoEXT(
|
|
m_state, (VkCalibratedTimestampInfoEXT*)(pTimestampInfos + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetCalibratedTimestampsEXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)timestampCount, (unsigned long long)pTimestampInfos,
|
|
(unsigned long long)pTimestamps, (unsigned long long)pMaxDeviation);
|
|
}
|
|
VkResult vkGetCalibratedTimestampsEXT_VkResult_return = (VkResult)0;
|
|
vkGetCalibratedTimestampsEXT_VkResult_return = vk->vkGetCalibratedTimestampsEXT(
|
|
unboxed_device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
|
|
if ((vkGetCalibratedTimestampsEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetCalibratedTimestampsEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint64_t*)pTimestamps, ((timestampCount)) * sizeof(uint64_t));
|
|
vkStream->write((uint64_t*)pMaxDeviation, sizeof(uint64_t));
|
|
vkStream->write(&vkGetCalibratedTimestampsEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetCalibratedTimestampsEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetCalibratedTimestampsEXT_VkResult_return, device, timestampCount,
|
|
pTimestampInfos, pTimestamps, pMaxDeviation);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_AMD_shader_core_properties
|
|
#endif
|
|
#ifdef VK_EXT_video_decode_h265
|
|
#endif
|
|
#ifdef VK_AMD_memory_overallocation_behavior
|
|
#endif
|
|
#ifdef VK_EXT_vertex_attribute_divisor
|
|
#endif
|
|
#ifdef VK_GGP_frame_token
|
|
#endif
|
|
#ifdef VK_EXT_pipeline_creation_feedback
|
|
#endif
|
|
#ifdef VK_NV_shader_subgroup_partitioned
|
|
#endif
|
|
#ifdef VK_NV_compute_shader_derivatives
|
|
#endif
|
|
#ifdef VK_NV_mesh_shader
|
|
case OP_vkCmdDrawMeshTasksNV: {
|
|
android::base::beginTrace("vkCmdDrawMeshTasksNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t taskCount;
|
|
uint32_t firstTask;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&taskCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&firstTask, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdDrawMeshTasksNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)taskCount, (unsigned long long)firstTask);
|
|
}
|
|
vk->vkCmdDrawMeshTasksNV(unboxed_commandBuffer, taskCount, firstTask);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawMeshTasksNV(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, taskCount, firstTask);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawMeshTasksIndirectNV: {
|
|
android::base::beginTrace("vkCmdDrawMeshTasksIndirectNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
uint32_t drawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&drawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawMeshTasksIndirectNV 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)drawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawMeshTasksIndirectNV(unboxed_commandBuffer, buffer, offset, drawCount,
|
|
stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawMeshTasksIndirectNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, drawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawMeshTasksIndirectCountNV: {
|
|
android::base::beginTrace("vkCmdDrawMeshTasksIndirectCountNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBuffer buffer;
|
|
VkDeviceSize offset;
|
|
VkBuffer countBuffer;
|
|
VkDeviceSize countBufferOffset;
|
|
uint32_t maxDrawCount;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&countBufferOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((uint32_t*)&maxDrawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawMeshTasksIndirectCountNV 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
|
|
(unsigned long long)offset, (unsigned long long)countBuffer,
|
|
(unsigned long long)countBufferOffset, (unsigned long long)maxDrawCount,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawMeshTasksIndirectCountNV(unboxed_commandBuffer, buffer, offset,
|
|
countBuffer, countBufferOffset, maxDrawCount,
|
|
stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawMeshTasksIndirectCountNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
|
|
offset, countBuffer, countBufferOffset, maxDrawCount, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_fragment_shader_barycentric
|
|
#endif
|
|
#ifdef VK_NV_shader_image_footprint
|
|
#endif
|
|
#ifdef VK_NV_scissor_exclusive
|
|
case OP_vkCmdSetExclusiveScissorNV: {
|
|
android::base::beginTrace("vkCmdSetExclusiveScissorNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstExclusiveScissor;
|
|
uint32_t exclusiveScissorCount;
|
|
const VkRect2D* pExclusiveScissors;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstExclusiveScissor, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&exclusiveScissorCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pExclusiveScissors,
|
|
((exclusiveScissorCount)) * sizeof(const VkRect2D));
|
|
for (uint32_t i = 0; i < (uint32_t)((exclusiveScissorCount)); ++i) {
|
|
reservedunmarshal_VkRect2D(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRect2D*)(pExclusiveScissors + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pExclusiveScissors) {
|
|
for (uint32_t i = 0; i < (uint32_t)((exclusiveScissorCount)); ++i) {
|
|
transform_tohost_VkRect2D(m_state, (VkRect2D*)(pExclusiveScissors + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdSetExclusiveScissorNV 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstExclusiveScissor,
|
|
(unsigned long long)exclusiveScissorCount,
|
|
(unsigned long long)pExclusiveScissors);
|
|
}
|
|
vk->vkCmdSetExclusiveScissorNV(unboxed_commandBuffer, firstExclusiveScissor,
|
|
exclusiveScissorCount, pExclusiveScissors);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetExclusiveScissorNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_device_diagnostic_checkpoints
|
|
case OP_vkCmdSetCheckpointNV: {
|
|
android::base::beginTrace("vkCmdSetCheckpointNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const void* pCheckpointMarker;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
// WARNING PTR CHECK
|
|
memcpy((void**)&pCheckpointMarker, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCheckpointMarker);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCheckpointMarker) {
|
|
vkReadStream->alloc((void**)&pCheckpointMarker, sizeof(const uint8_t));
|
|
memcpy((void*)pCheckpointMarker, *readStreamPtrPtr, sizeof(const uint8_t));
|
|
*readStreamPtrPtr += sizeof(const uint8_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetCheckpointNV 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pCheckpointMarker);
|
|
}
|
|
vk->vkCmdSetCheckpointNV(unboxed_commandBuffer, pCheckpointMarker);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetCheckpointNV(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, pCheckpointMarker);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetQueueCheckpointDataNV: {
|
|
android::base::beginTrace("vkGetQueueCheckpointDataNV decode");
|
|
VkQueue queue;
|
|
uint32_t* pCheckpointDataCount;
|
|
VkCheckpointDataNV* pCheckpointData;
|
|
// Begin non wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
auto unboxed_queue = unbox_VkQueue(queue);
|
|
auto vk = dispatch_VkQueue(queue);
|
|
// End manual dispatchable handle unboxing for queue;
|
|
// Begin manual dispatchable handle unboxing for pCheckpointDataCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pCheckpointDataCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCheckpointDataCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCheckpointDataCount) {
|
|
vkReadStream->alloc((void**)&pCheckpointDataCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pCheckpointDataCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pCheckpointData;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkCheckpointDataNV**)&pCheckpointData, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCheckpointData);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCheckpointData) {
|
|
vkReadStream->alloc((void**)&pCheckpointData,
|
|
(*(pCheckpointDataCount)) * sizeof(VkCheckpointDataNV));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
|
|
reservedunmarshal_VkCheckpointDataNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCheckpointDataNV*)(pCheckpointData + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pCheckpointDataCount) {
|
|
if (pCheckpointData) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
|
|
transform_tohost_VkCheckpointDataNV(
|
|
m_state, (VkCheckpointDataNV*)(pCheckpointData + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetQueueCheckpointDataNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue,
|
|
(unsigned long long)pCheckpointDataCount,
|
|
(unsigned long long)pCheckpointData);
|
|
}
|
|
vk->vkGetQueueCheckpointDataNV(unboxed_queue, pCheckpointDataCount,
|
|
pCheckpointData);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pCheckpointDataCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pCheckpointDataCount) {
|
|
vkStream->write((uint32_t*)pCheckpointDataCount, sizeof(uint32_t));
|
|
}
|
|
if (pCheckpointDataCount) {
|
|
if (pCheckpointData) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
|
|
transform_fromhost_VkCheckpointDataNV(
|
|
m_state, (VkCheckpointDataNV*)(pCheckpointData + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pCheckpointData;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pCheckpointData) {
|
|
if (pCheckpointDataCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
|
|
marshal_VkCheckpointDataNV(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCheckpointDataNV*)(pCheckpointData + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetQueueCheckpointDataNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue,
|
|
pCheckpointDataCount, pCheckpointData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_INTEL_shader_integer_functions2
|
|
#endif
|
|
#ifdef VK_INTEL_performance_query
|
|
case OP_vkInitializePerformanceApiINTEL: {
|
|
android::base::beginTrace("vkInitializePerformanceApiINTEL decode");
|
|
VkDevice device;
|
|
const VkInitializePerformanceApiInfoINTEL* pInitializeInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInitializeInfo,
|
|
sizeof(const VkInitializePerformanceApiInfoINTEL));
|
|
reservedunmarshal_VkInitializePerformanceApiInfoINTEL(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkInitializePerformanceApiInfoINTEL*)(pInitializeInfo), readStreamPtrPtr);
|
|
if (pInitializeInfo) {
|
|
transform_tohost_VkInitializePerformanceApiInfoINTEL(
|
|
m_state, (VkInitializePerformanceApiInfoINTEL*)(pInitializeInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr, "stream %p: call vkInitializePerformanceApiINTEL 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInitializeInfo);
|
|
}
|
|
VkResult vkInitializePerformanceApiINTEL_VkResult_return = (VkResult)0;
|
|
vkInitializePerformanceApiINTEL_VkResult_return =
|
|
vk->vkInitializePerformanceApiINTEL(unboxed_device, pInitializeInfo);
|
|
if ((vkInitializePerformanceApiINTEL_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkInitializePerformanceApiINTEL_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkInitializePerformanceApiINTEL_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkInitializePerformanceApiINTEL(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkInitializePerformanceApiINTEL_VkResult_return, device, pInitializeInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkUninitializePerformanceApiINTEL: {
|
|
android::base::beginTrace("vkUninitializePerformanceApiINTEL decode");
|
|
VkDevice device;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkUninitializePerformanceApiINTEL 0x%llx \n",
|
|
ioStream, (unsigned long long)device);
|
|
}
|
|
vk->vkUninitializePerformanceApiINTEL(unboxed_device);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkUninitializePerformanceApiINTEL(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetPerformanceMarkerINTEL: {
|
|
android::base::beginTrace("vkCmdSetPerformanceMarkerINTEL decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkPerformanceMarkerInfoINTEL* pMarkerInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pMarkerInfo,
|
|
sizeof(const VkPerformanceMarkerInfoINTEL));
|
|
reservedunmarshal_VkPerformanceMarkerInfoINTEL(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceMarkerInfoINTEL*)(pMarkerInfo), readStreamPtrPtr);
|
|
if (pMarkerInfo) {
|
|
transform_tohost_VkPerformanceMarkerInfoINTEL(
|
|
m_state, (VkPerformanceMarkerInfoINTEL*)(pMarkerInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetPerformanceMarkerINTEL 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pMarkerInfo);
|
|
}
|
|
VkResult vkCmdSetPerformanceMarkerINTEL_VkResult_return = (VkResult)0;
|
|
vkCmdSetPerformanceMarkerINTEL_VkResult_return =
|
|
vk->vkCmdSetPerformanceMarkerINTEL(unboxed_commandBuffer, pMarkerInfo);
|
|
if ((vkCmdSetPerformanceMarkerINTEL_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCmdSetPerformanceMarkerINTEL_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkCmdSetPerformanceMarkerINTEL_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetPerformanceMarkerINTEL(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCmdSetPerformanceMarkerINTEL_VkResult_return, commandBuffer, pMarkerInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetPerformanceStreamMarkerINTEL: {
|
|
android::base::beginTrace("vkCmdSetPerformanceStreamMarkerINTEL decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pMarkerInfo,
|
|
sizeof(const VkPerformanceStreamMarkerInfoINTEL));
|
|
reservedunmarshal_VkPerformanceStreamMarkerInfoINTEL(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceStreamMarkerInfoINTEL*)(pMarkerInfo), readStreamPtrPtr);
|
|
if (pMarkerInfo) {
|
|
transform_tohost_VkPerformanceStreamMarkerInfoINTEL(
|
|
m_state, (VkPerformanceStreamMarkerInfoINTEL*)(pMarkerInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetPerformanceStreamMarkerINTEL 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pMarkerInfo);
|
|
}
|
|
VkResult vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return = (VkResult)0;
|
|
vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return =
|
|
vk->vkCmdSetPerformanceStreamMarkerINTEL(unboxed_commandBuffer, pMarkerInfo);
|
|
if ((vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetPerformanceStreamMarkerINTEL(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return, commandBuffer,
|
|
pMarkerInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetPerformanceOverrideINTEL: {
|
|
android::base::beginTrace("vkCmdSetPerformanceOverrideINTEL decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkPerformanceOverrideInfoINTEL* pOverrideInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pOverrideInfo,
|
|
sizeof(const VkPerformanceOverrideInfoINTEL));
|
|
reservedunmarshal_VkPerformanceOverrideInfoINTEL(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceOverrideInfoINTEL*)(pOverrideInfo), readStreamPtrPtr);
|
|
if (pOverrideInfo) {
|
|
transform_tohost_VkPerformanceOverrideInfoINTEL(
|
|
m_state, (VkPerformanceOverrideInfoINTEL*)(pOverrideInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetPerformanceOverrideINTEL 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pOverrideInfo);
|
|
}
|
|
VkResult vkCmdSetPerformanceOverrideINTEL_VkResult_return = (VkResult)0;
|
|
vkCmdSetPerformanceOverrideINTEL_VkResult_return =
|
|
vk->vkCmdSetPerformanceOverrideINTEL(unboxed_commandBuffer, pOverrideInfo);
|
|
if ((vkCmdSetPerformanceOverrideINTEL_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCmdSetPerformanceOverrideINTEL_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkCmdSetPerformanceOverrideINTEL_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetPerformanceOverrideINTEL(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCmdSetPerformanceOverrideINTEL_VkResult_return, commandBuffer,
|
|
pOverrideInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkAcquirePerformanceConfigurationINTEL: {
|
|
android::base::beginTrace("vkAcquirePerformanceConfigurationINTEL decode");
|
|
VkDevice device;
|
|
const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo;
|
|
VkPerformanceConfigurationINTEL* pConfiguration;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pAcquireInfo,
|
|
sizeof(const VkPerformanceConfigurationAcquireInfoINTEL));
|
|
reservedunmarshal_VkPerformanceConfigurationAcquireInfoINTEL(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceConfigurationAcquireInfoINTEL*)(pAcquireInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pConfiguration;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pConfiguration,
|
|
sizeof(VkPerformanceConfigurationINTEL));
|
|
memcpy((VkPerformanceConfigurationINTEL*)&(*pConfiguration), (*readStreamPtrPtr),
|
|
8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pConfiguration));
|
|
*readStreamPtrPtr += 8;
|
|
if (pAcquireInfo) {
|
|
transform_tohost_VkPerformanceConfigurationAcquireInfoINTEL(
|
|
m_state, (VkPerformanceConfigurationAcquireInfoINTEL*)(pAcquireInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAcquirePerformanceConfigurationINTEL 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pAcquireInfo,
|
|
(unsigned long long)pConfiguration);
|
|
}
|
|
VkResult vkAcquirePerformanceConfigurationINTEL_VkResult_return = (VkResult)0;
|
|
vkAcquirePerformanceConfigurationINTEL_VkResult_return =
|
|
vk->vkAcquirePerformanceConfigurationINTEL(unboxed_device, pAcquireInfo,
|
|
pConfiguration);
|
|
if ((vkAcquirePerformanceConfigurationINTEL_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAcquirePerformanceConfigurationINTEL_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_2 = (uint64_t)(*pConfiguration);
|
|
vkStream->putBe64(cgen_var_2);
|
|
vkStream->write(&vkAcquirePerformanceConfigurationINTEL_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAcquirePerformanceConfigurationINTEL(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAcquirePerformanceConfigurationINTEL_VkResult_return, device,
|
|
pAcquireInfo, pConfiguration);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkReleasePerformanceConfigurationINTEL: {
|
|
android::base::beginTrace("vkReleasePerformanceConfigurationINTEL decode");
|
|
VkDevice device;
|
|
VkPerformanceConfigurationINTEL configuration;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkPerformanceConfigurationINTEL*)&configuration, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&configuration);
|
|
*readStreamPtrPtr += 8;
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkReleasePerformanceConfigurationINTEL 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)configuration);
|
|
}
|
|
VkResult vkReleasePerformanceConfigurationINTEL_VkResult_return = (VkResult)0;
|
|
vkReleasePerformanceConfigurationINTEL_VkResult_return =
|
|
vk->vkReleasePerformanceConfigurationINTEL(unboxed_device, configuration);
|
|
if ((vkReleasePerformanceConfigurationINTEL_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkReleasePerformanceConfigurationINTEL_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkReleasePerformanceConfigurationINTEL_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkReleasePerformanceConfigurationINTEL(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkReleasePerformanceConfigurationINTEL_VkResult_return, device,
|
|
configuration);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueSetPerformanceConfigurationINTEL: {
|
|
android::base::beginTrace("vkQueueSetPerformanceConfigurationINTEL decode");
|
|
VkQueue queue;
|
|
VkPerformanceConfigurationINTEL configuration;
|
|
// Begin non wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
auto unboxed_queue = unbox_VkQueue(queue);
|
|
auto vk = dispatch_VkQueue(queue);
|
|
// End manual dispatchable handle unboxing for queue;
|
|
memcpy((VkPerformanceConfigurationINTEL*)&configuration, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&configuration);
|
|
*readStreamPtrPtr += 8;
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkQueueSetPerformanceConfigurationINTEL 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)configuration);
|
|
}
|
|
VkResult vkQueueSetPerformanceConfigurationINTEL_VkResult_return = (VkResult)0;
|
|
vkQueueSetPerformanceConfigurationINTEL_VkResult_return =
|
|
vk->vkQueueSetPerformanceConfigurationINTEL(unboxed_queue, configuration);
|
|
if ((vkQueueSetPerformanceConfigurationINTEL_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkQueueSetPerformanceConfigurationINTEL_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkQueueSetPerformanceConfigurationINTEL_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueSetPerformanceConfigurationINTEL(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkQueueSetPerformanceConfigurationINTEL_VkResult_return, queue,
|
|
configuration);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPerformanceParameterINTEL: {
|
|
android::base::beginTrace("vkGetPerformanceParameterINTEL decode");
|
|
VkDevice device;
|
|
VkPerformanceParameterTypeINTEL parameter;
|
|
VkPerformanceValueINTEL* pValue;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkPerformanceParameterTypeINTEL*)¶meter, *readStreamPtrPtr,
|
|
sizeof(VkPerformanceParameterTypeINTEL));
|
|
*readStreamPtrPtr += sizeof(VkPerformanceParameterTypeINTEL);
|
|
// Begin manual dispatchable handle unboxing for pValue;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pValue, sizeof(VkPerformanceValueINTEL));
|
|
reservedunmarshal_VkPerformanceValueINTEL(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceValueINTEL*)(pValue),
|
|
readStreamPtrPtr);
|
|
if (pValue) {
|
|
transform_tohost_VkPerformanceValueINTEL(m_state,
|
|
(VkPerformanceValueINTEL*)(pValue));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetPerformanceParameterINTEL 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)parameter,
|
|
(unsigned long long)pValue);
|
|
}
|
|
VkResult vkGetPerformanceParameterINTEL_VkResult_return = (VkResult)0;
|
|
vkGetPerformanceParameterINTEL_VkResult_return =
|
|
vk->vkGetPerformanceParameterINTEL(unboxed_device, parameter, pValue);
|
|
if ((vkGetPerformanceParameterINTEL_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetPerformanceParameterINTEL_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pValue) {
|
|
transform_fromhost_VkPerformanceValueINTEL(m_state,
|
|
(VkPerformanceValueINTEL*)(pValue));
|
|
}
|
|
marshal_VkPerformanceValueINTEL(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPerformanceValueINTEL*)(pValue));
|
|
vkStream->write(&vkGetPerformanceParameterINTEL_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPerformanceParameterINTEL(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPerformanceParameterINTEL_VkResult_return, device, parameter, pValue);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_pci_bus_info
|
|
#endif
|
|
#ifdef VK_AMD_display_native_hdr
|
|
case OP_vkSetLocalDimmingAMD: {
|
|
android::base::beginTrace("vkSetLocalDimmingAMD decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapChain;
|
|
VkBool32 localDimmingEnable;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapChain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
memcpy((VkBool32*)&localDimmingEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkSetLocalDimmingAMD 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapChain,
|
|
(unsigned long long)localDimmingEnable);
|
|
}
|
|
vk->vkSetLocalDimmingAMD(unboxed_device, swapChain, localDimmingEnable);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetLocalDimmingAMD(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool, device,
|
|
swapChain, localDimmingEnable);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_FUCHSIA_imagepipe_surface
|
|
case OP_vkCreateImagePipeSurfaceFUCHSIA: {
|
|
android::base::beginTrace("vkCreateImagePipeSurfaceFUCHSIA decode");
|
|
VkInstance instance;
|
|
const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkImagePipeSurfaceCreateInfoFUCHSIA));
|
|
reservedunmarshal_VkImagePipeSurfaceCreateInfoFUCHSIA(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImagePipeSurfaceCreateInfoFUCHSIA*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkImagePipeSurfaceCreateInfoFUCHSIA(
|
|
m_state, (VkImagePipeSurfaceCreateInfoFUCHSIA*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateImagePipeSurfaceFUCHSIA 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateImagePipeSurfaceFUCHSIA_VkResult_return = (VkResult)0;
|
|
vkCreateImagePipeSurfaceFUCHSIA_VkResult_return =
|
|
vk->vkCreateImagePipeSurfaceFUCHSIA(unboxed_instance, pCreateInfo, pAllocator,
|
|
pSurface);
|
|
if ((vkCreateImagePipeSurfaceFUCHSIA_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateImagePipeSurfaceFUCHSIA_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateImagePipeSurfaceFUCHSIA_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateImagePipeSurfaceFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateImagePipeSurfaceFUCHSIA_VkResult_return, instance, pCreateInfo,
|
|
pAllocator, pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_metal_surface
|
|
case OP_vkCreateMetalSurfaceEXT: {
|
|
android::base::beginTrace("vkCreateMetalSurfaceEXT decode");
|
|
// Decoding vkCreateMetalSurfaceEXT is not supported. This should not run.
|
|
fprintf(stderr,
|
|
"stream %p: fatal: decoding unsupported API vkCreateMetalSurfaceEXT\n",
|
|
ioStream);
|
|
__builtin_trap();
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_fragment_density_map
|
|
#endif
|
|
#ifdef VK_EXT_scalar_block_layout
|
|
#endif
|
|
#ifdef VK_GOOGLE_hlsl_functionality1
|
|
#endif
|
|
#ifdef VK_GOOGLE_decorate_string
|
|
#endif
|
|
#ifdef VK_EXT_subgroup_size_control
|
|
#endif
|
|
#ifdef VK_AMD_shader_core_properties2
|
|
#endif
|
|
#ifdef VK_AMD_device_coherent_memory
|
|
#endif
|
|
#ifdef VK_EXT_shader_image_atomic_int64
|
|
#endif
|
|
#ifdef VK_EXT_memory_budget
|
|
#endif
|
|
#ifdef VK_EXT_memory_priority
|
|
#endif
|
|
#ifdef VK_NV_dedicated_allocation_image_aliasing
|
|
#endif
|
|
#ifdef VK_EXT_buffer_device_address
|
|
case OP_vkGetBufferDeviceAddressEXT: {
|
|
android::base::beginTrace("vkGetBufferDeviceAddressEXT decode");
|
|
VkDevice device;
|
|
const VkBufferDeviceAddressInfo* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo, sizeof(const VkBufferDeviceAddressInfo));
|
|
reservedunmarshal_VkBufferDeviceAddressInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(pInfo),
|
|
readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkBufferDeviceAddressInfo(m_state,
|
|
(VkBufferDeviceAddressInfo*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetBufferDeviceAddressEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
VkDeviceAddress vkGetBufferDeviceAddressEXT_VkDeviceAddress_return =
|
|
(VkDeviceAddress)0;
|
|
vkGetBufferDeviceAddressEXT_VkDeviceAddress_return =
|
|
vk->vkGetBufferDeviceAddressEXT(unboxed_device, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetBufferDeviceAddressEXT_VkDeviceAddress_return,
|
|
sizeof(VkDeviceAddress));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBufferDeviceAddressEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetBufferDeviceAddressEXT_VkDeviceAddress_return, device, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_tooling_info
|
|
case OP_vkGetPhysicalDeviceToolPropertiesEXT: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceToolPropertiesEXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pToolCount;
|
|
VkPhysicalDeviceToolPropertiesEXT* pToolProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pToolCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pToolCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pToolCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pToolCount) {
|
|
vkReadStream->alloc((void**)&pToolCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pToolCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pToolProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPhysicalDeviceToolPropertiesEXT**)&pToolProperties, (*readStreamPtrPtr),
|
|
8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pToolProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pToolProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pToolProperties,
|
|
(*(pToolCount)) * sizeof(VkPhysicalDeviceToolPropertiesEXT));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
|
|
reservedunmarshal_VkPhysicalDeviceToolPropertiesEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pToolCount) {
|
|
if (pToolProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
|
|
transform_tohost_VkPhysicalDeviceToolPropertiesEXT(
|
|
m_state, (VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceToolPropertiesEXT 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pToolCount, (unsigned long long)pToolProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return =
|
|
vk->vkGetPhysicalDeviceToolPropertiesEXT(unboxed_physicalDevice, pToolCount,
|
|
pToolProperties);
|
|
if ((vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pToolCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pToolCount) {
|
|
vkStream->write((uint32_t*)pToolCount, sizeof(uint32_t));
|
|
}
|
|
if (pToolCount) {
|
|
if (pToolProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
|
|
transform_fromhost_VkPhysicalDeviceToolPropertiesEXT(
|
|
m_state, (VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pToolProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pToolProperties) {
|
|
if (pToolCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
|
|
marshal_VkPhysicalDeviceToolPropertiesEXT(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceToolPropertiesEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return, physicalDevice,
|
|
pToolCount, pToolProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_separate_stencil_usage
|
|
#endif
|
|
#ifdef VK_EXT_validation_features
|
|
#endif
|
|
#ifdef VK_NV_cooperative_matrix
|
|
case OP_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV: {
|
|
android::base::beginTrace(
|
|
"vkGetPhysicalDeviceCooperativeMatrixPropertiesNV decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pPropertyCount;
|
|
VkCooperativeMatrixPropertiesNV* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pPropertyCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPropertyCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPropertyCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPropertyCount) {
|
|
vkReadStream->alloc((void**)&pPropertyCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPropertyCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkCooperativeMatrixPropertiesNV**)&pProperties, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pProperties);
|
|
*readStreamPtrPtr += 8;
|
|
if (pProperties) {
|
|
vkReadStream->alloc(
|
|
(void**)&pProperties,
|
|
(*(pPropertyCount)) * sizeof(VkCooperativeMatrixPropertiesNV));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
reservedunmarshal_VkCooperativeMatrixPropertiesNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCooperativeMatrixPropertiesNV*)(pProperties + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_tohost_VkCooperativeMatrixPropertiesNV(
|
|
m_state, (VkCooperativeMatrixPropertiesNV*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceCooperativeMatrixPropertiesNV "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pPropertyCount, (unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetPhysicalDeviceCooperativeMatrixPropertiesNV_VkResult_return =
|
|
(VkResult)0;
|
|
vkGetPhysicalDeviceCooperativeMatrixPropertiesNV_VkResult_return =
|
|
vk->vkGetPhysicalDeviceCooperativeMatrixPropertiesNV(
|
|
unboxed_physicalDevice, pPropertyCount, pProperties);
|
|
if ((vkGetPhysicalDeviceCooperativeMatrixPropertiesNV_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceCooperativeMatrixPropertiesNV_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPropertyCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPropertyCount) {
|
|
vkStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
|
|
}
|
|
if (pPropertyCount) {
|
|
if (pProperties) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
transform_fromhost_VkCooperativeMatrixPropertiesNV(
|
|
m_state, (VkCooperativeMatrixPropertiesNV*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pProperties;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pProperties) {
|
|
if (pPropertyCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
|
|
marshal_VkCooperativeMatrixPropertiesNV(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCooperativeMatrixPropertiesNV*)(pProperties + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceCooperativeMatrixPropertiesNV_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceCooperativeMatrixPropertiesNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceCooperativeMatrixPropertiesNV_VkResult_return,
|
|
physicalDevice, pPropertyCount, pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_coverage_reduction_mode
|
|
case OP_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV: {
|
|
android::base::beginTrace(
|
|
"vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t* pCombinationCount;
|
|
VkFramebufferMixedSamplesCombinationNV* pCombinations;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
// Begin manual dispatchable handle unboxing for pCombinationCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pCombinationCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCombinationCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCombinationCount) {
|
|
vkReadStream->alloc((void**)&pCombinationCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pCombinationCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pCombinations;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkFramebufferMixedSamplesCombinationNV**)&pCombinations,
|
|
(*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pCombinations);
|
|
*readStreamPtrPtr += 8;
|
|
if (pCombinations) {
|
|
vkReadStream->alloc(
|
|
(void**)&pCombinations,
|
|
(*(pCombinationCount)) * sizeof(VkFramebufferMixedSamplesCombinationNV));
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCombinationCount)); ++i) {
|
|
reservedunmarshal_VkFramebufferMixedSamplesCombinationNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
}
|
|
if (pCombinationCount) {
|
|
if (pCombinations) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCombinationCount)); ++i) {
|
|
transform_tohost_VkFramebufferMixedSamplesCombinationNV(
|
|
m_state,
|
|
(VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i));
|
|
}
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call "
|
|
"vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pCombinationCount,
|
|
(unsigned long long)pCombinations);
|
|
}
|
|
VkResult
|
|
vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV_VkResult_return =
|
|
(VkResult)0;
|
|
vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV_VkResult_return =
|
|
vk->vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
|
|
unboxed_physicalDevice, pCombinationCount, pCombinations);
|
|
if ((vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pCombinationCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pCombinationCount) {
|
|
vkStream->write((uint32_t*)pCombinationCount, sizeof(uint32_t));
|
|
}
|
|
if (pCombinationCount) {
|
|
if (pCombinations) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCombinationCount)); ++i) {
|
|
transform_fromhost_VkFramebufferMixedSamplesCombinationNV(
|
|
m_state,
|
|
(VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i));
|
|
}
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pCombinations;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pCombinations) {
|
|
if (pCombinationCount) {
|
|
for (uint32_t i = 0; i < (uint32_t)(*(pCombinationCount)); ++i) {
|
|
marshal_VkFramebufferMixedSamplesCombinationNV(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i));
|
|
}
|
|
}
|
|
}
|
|
vkStream->write(
|
|
&vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()
|
|
->vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV_VkResult_return,
|
|
physicalDevice, pCombinationCount, pCombinations);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_fragment_shader_interlock
|
|
#endif
|
|
#ifdef VK_EXT_ycbcr_image_arrays
|
|
#endif
|
|
#ifdef VK_EXT_provoking_vertex
|
|
#endif
|
|
#ifdef VK_EXT_full_screen_exclusive
|
|
case OP_vkGetPhysicalDeviceSurfacePresentModes2EXT: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceSurfacePresentModes2EXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo;
|
|
uint32_t* pPresentModeCount;
|
|
VkPresentModeKHR* pPresentModes;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
vkReadStream->alloc((void**)&pSurfaceInfo,
|
|
sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
|
|
reservedunmarshal_VkPhysicalDeviceSurfaceInfo2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceSurfaceInfo2KHR*)(pSurfaceInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pPresentModeCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pPresentModeCount, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPresentModeCount);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPresentModeCount) {
|
|
vkReadStream->alloc((void**)&pPresentModeCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPresentModeCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPresentModes;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkPresentModeKHR**)&pPresentModes, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPresentModes);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPresentModes) {
|
|
vkReadStream->alloc((void**)&pPresentModes,
|
|
(*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
|
|
memcpy((VkPresentModeKHR*)pPresentModes, *readStreamPtrPtr,
|
|
(*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
|
|
*readStreamPtrPtr += (*(pPresentModeCount)) * sizeof(VkPresentModeKHR);
|
|
}
|
|
if (pSurfaceInfo) {
|
|
transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(
|
|
m_state, (VkPhysicalDeviceSurfaceInfo2KHR*)(pSurfaceInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceSurfacePresentModes2EXT 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)pSurfaceInfo, (unsigned long long)pPresentModeCount,
|
|
(unsigned long long)pPresentModes);
|
|
}
|
|
VkResult vkGetPhysicalDeviceSurfacePresentModes2EXT_VkResult_return = (VkResult)0;
|
|
vkGetPhysicalDeviceSurfacePresentModes2EXT_VkResult_return =
|
|
vk->vkGetPhysicalDeviceSurfacePresentModes2EXT(
|
|
unboxed_physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes);
|
|
if ((vkGetPhysicalDeviceSurfacePresentModes2EXT_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetPhysicalDeviceSurfacePresentModes2EXT_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPresentModeCount;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPresentModeCount) {
|
|
vkStream->write((uint32_t*)pPresentModeCount, sizeof(uint32_t));
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pPresentModes;
|
|
vkStream->putBe64(cgen_var_4);
|
|
if (pPresentModes) {
|
|
vkStream->write((VkPresentModeKHR*)pPresentModes,
|
|
(*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
|
|
}
|
|
vkStream->write(&vkGetPhysicalDeviceSurfacePresentModes2EXT_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceSurfacePresentModes2EXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceSurfacePresentModes2EXT_VkResult_return, physicalDevice,
|
|
pSurfaceInfo, pPresentModeCount, pPresentModes);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkAcquireFullScreenExclusiveModeEXT: {
|
|
android::base::beginTrace("vkAcquireFullScreenExclusiveModeEXT decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAcquireFullScreenExclusiveModeEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain);
|
|
}
|
|
VkResult vkAcquireFullScreenExclusiveModeEXT_VkResult_return = (VkResult)0;
|
|
vkAcquireFullScreenExclusiveModeEXT_VkResult_return =
|
|
vk->vkAcquireFullScreenExclusiveModeEXT(unboxed_device, swapchain);
|
|
if ((vkAcquireFullScreenExclusiveModeEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAcquireFullScreenExclusiveModeEXT_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkAcquireFullScreenExclusiveModeEXT_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAcquireFullScreenExclusiveModeEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAcquireFullScreenExclusiveModeEXT_VkResult_return, device, swapchain);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkReleaseFullScreenExclusiveModeEXT: {
|
|
android::base::beginTrace("vkReleaseFullScreenExclusiveModeEXT decode");
|
|
VkDevice device;
|
|
VkSwapchainKHR swapchain;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkSwapchainKHR*)&swapchain =
|
|
(VkSwapchainKHR)unbox_VkSwapchainKHR((VkSwapchainKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkReleaseFullScreenExclusiveModeEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)swapchain);
|
|
}
|
|
VkResult vkReleaseFullScreenExclusiveModeEXT_VkResult_return = (VkResult)0;
|
|
vkReleaseFullScreenExclusiveModeEXT_VkResult_return =
|
|
vk->vkReleaseFullScreenExclusiveModeEXT(unboxed_device, swapchain);
|
|
if ((vkReleaseFullScreenExclusiveModeEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkReleaseFullScreenExclusiveModeEXT_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkReleaseFullScreenExclusiveModeEXT_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkReleaseFullScreenExclusiveModeEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkReleaseFullScreenExclusiveModeEXT_VkResult_return, device, swapchain);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceGroupSurfacePresentModes2EXT: {
|
|
android::base::beginTrace("vkGetDeviceGroupSurfacePresentModes2EXT decode");
|
|
VkDevice device;
|
|
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo;
|
|
VkDeviceGroupPresentModeFlagsKHR* pModes;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pSurfaceInfo,
|
|
sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
|
|
reservedunmarshal_VkPhysicalDeviceSurfaceInfo2KHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPhysicalDeviceSurfaceInfo2KHR*)(pSurfaceInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pModes;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDeviceGroupPresentModeFlagsKHR**)&pModes, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pModes);
|
|
*readStreamPtrPtr += 8;
|
|
if (pModes) {
|
|
vkReadStream->alloc((void**)&pModes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
|
|
memcpy((VkDeviceGroupPresentModeFlagsKHR*)pModes, *readStreamPtrPtr,
|
|
sizeof(VkDeviceGroupPresentModeFlagsKHR));
|
|
*readStreamPtrPtr += sizeof(VkDeviceGroupPresentModeFlagsKHR);
|
|
}
|
|
if (pSurfaceInfo) {
|
|
transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(
|
|
m_state, (VkPhysicalDeviceSurfaceInfo2KHR*)(pSurfaceInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceGroupSurfacePresentModes2EXT 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pSurfaceInfo,
|
|
(unsigned long long)pModes);
|
|
}
|
|
VkResult vkGetDeviceGroupSurfacePresentModes2EXT_VkResult_return = (VkResult)0;
|
|
vkGetDeviceGroupSurfacePresentModes2EXT_VkResult_return =
|
|
vk->vkGetDeviceGroupSurfacePresentModes2EXT(unboxed_device, pSurfaceInfo,
|
|
pModes);
|
|
if ((vkGetDeviceGroupSurfacePresentModes2EXT_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetDeviceGroupSurfacePresentModes2EXT_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pModes;
|
|
vkStream->putBe64(cgen_var_2);
|
|
if (pModes) {
|
|
vkStream->write((VkDeviceGroupPresentModeFlagsKHR*)pModes,
|
|
sizeof(VkDeviceGroupPresentModeFlagsKHR));
|
|
}
|
|
vkStream->write(&vkGetDeviceGroupSurfacePresentModes2EXT_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceGroupSurfacePresentModes2EXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDeviceGroupSurfacePresentModes2EXT_VkResult_return, device,
|
|
pSurfaceInfo, pModes);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_headless_surface
|
|
case OP_vkCreateHeadlessSurfaceEXT: {
|
|
android::base::beginTrace("vkCreateHeadlessSurfaceEXT decode");
|
|
VkInstance instance;
|
|
const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkHeadlessSurfaceCreateInfoEXT));
|
|
reservedunmarshal_VkHeadlessSurfaceCreateInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkHeadlessSurfaceCreateInfoEXT*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkHeadlessSurfaceCreateInfoEXT(
|
|
m_state, (VkHeadlessSurfaceCreateInfoEXT*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreateHeadlessSurfaceEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateHeadlessSurfaceEXT_VkResult_return = (VkResult)0;
|
|
vkCreateHeadlessSurfaceEXT_VkResult_return = vk->vkCreateHeadlessSurfaceEXT(
|
|
unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateHeadlessSurfaceEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateHeadlessSurfaceEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateHeadlessSurfaceEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateHeadlessSurfaceEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateHeadlessSurfaceEXT_VkResult_return, instance, pCreateInfo,
|
|
pAllocator, pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_line_rasterization
|
|
case OP_vkCmdSetLineStippleEXT: {
|
|
android::base::beginTrace("vkCmdSetLineStippleEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t lineStippleFactor;
|
|
uint16_t lineStipplePattern;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&lineStippleFactor, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint16_t*)&lineStipplePattern, *readStreamPtrPtr, sizeof(uint16_t));
|
|
*readStreamPtrPtr += sizeof(uint16_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetLineStippleEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)lineStippleFactor,
|
|
(unsigned long long)lineStipplePattern);
|
|
}
|
|
vk->vkCmdSetLineStippleEXT(unboxed_commandBuffer, lineStippleFactor,
|
|
lineStipplePattern);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetLineStippleEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
lineStippleFactor, lineStipplePattern);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_shader_atomic_float
|
|
#endif
|
|
#ifdef VK_EXT_host_query_reset
|
|
case OP_vkResetQueryPoolEXT: {
|
|
android::base::beginTrace("vkResetQueryPoolEXT decode");
|
|
VkDevice device;
|
|
VkQueryPool queryPool;
|
|
uint32_t firstQuery;
|
|
uint32_t queryCount;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&firstQuery, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&queryCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkResetQueryPoolEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)queryPool,
|
|
(unsigned long long)firstQuery, (unsigned long long)queryCount);
|
|
}
|
|
vk->vkResetQueryPoolEXT(unboxed_device, queryPool, firstQuery, queryCount);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkResetQueryPoolEXT(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, queryPool, firstQuery,
|
|
queryCount);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_index_type_uint8
|
|
#endif
|
|
#ifdef VK_EXT_extended_dynamic_state
|
|
case OP_vkCmdSetCullModeEXT: {
|
|
android::base::beginTrace("vkCmdSetCullModeEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkCullModeFlags cullMode;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkCullModeFlags*)&cullMode, *readStreamPtrPtr, sizeof(VkCullModeFlags));
|
|
*readStreamPtrPtr += sizeof(VkCullModeFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetCullModeEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)cullMode);
|
|
}
|
|
vk->vkCmdSetCullModeEXT(unboxed_commandBuffer, cullMode);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetCullModeEXT(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, cullMode);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetFrontFaceEXT: {
|
|
android::base::beginTrace("vkCmdSetFrontFaceEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkFrontFace frontFace;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkFrontFace*)&frontFace, *readStreamPtrPtr, sizeof(VkFrontFace));
|
|
*readStreamPtrPtr += sizeof(VkFrontFace);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetFrontFaceEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)frontFace);
|
|
}
|
|
vk->vkCmdSetFrontFaceEXT(unboxed_commandBuffer, frontFace);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetFrontFaceEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, frontFace);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetPrimitiveTopologyEXT: {
|
|
android::base::beginTrace("vkCmdSetPrimitiveTopologyEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPrimitiveTopology primitiveTopology;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkPrimitiveTopology*)&primitiveTopology, *readStreamPtrPtr,
|
|
sizeof(VkPrimitiveTopology));
|
|
*readStreamPtrPtr += sizeof(VkPrimitiveTopology);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetPrimitiveTopologyEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)primitiveTopology);
|
|
}
|
|
vk->vkCmdSetPrimitiveTopologyEXT(unboxed_commandBuffer, primitiveTopology);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetPrimitiveTopologyEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
primitiveTopology);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetViewportWithCountEXT: {
|
|
android::base::beginTrace("vkCmdSetViewportWithCountEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t viewportCount;
|
|
const VkViewport* pViewports;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&viewportCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pViewports,
|
|
((viewportCount)) * sizeof(const VkViewport));
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
|
reservedunmarshal_VkViewport(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkViewport*)(pViewports + i), readStreamPtrPtr);
|
|
}
|
|
if (pViewports) {
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
|
transform_tohost_VkViewport(m_state, (VkViewport*)(pViewports + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetViewportWithCountEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)viewportCount, (unsigned long long)pViewports);
|
|
}
|
|
vk->vkCmdSetViewportWithCountEXT(unboxed_commandBuffer, viewportCount, pViewports);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetViewportWithCountEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
viewportCount, pViewports);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetScissorWithCountEXT: {
|
|
android::base::beginTrace("vkCmdSetScissorWithCountEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t scissorCount;
|
|
const VkRect2D* pScissors;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&scissorCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pScissors, ((scissorCount)) * sizeof(const VkRect2D));
|
|
for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
|
|
reservedunmarshal_VkRect2D(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRect2D*)(pScissors + i), readStreamPtrPtr);
|
|
}
|
|
if (pScissors) {
|
|
for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
|
|
transform_tohost_VkRect2D(m_state, (VkRect2D*)(pScissors + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetScissorWithCountEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)scissorCount, (unsigned long long)pScissors);
|
|
}
|
|
vk->vkCmdSetScissorWithCountEXT(unboxed_commandBuffer, scissorCount, pScissors);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetScissorWithCountEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
scissorCount, pScissors);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBindVertexBuffers2EXT: {
|
|
android::base::beginTrace("vkCmdBindVertexBuffers2EXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t firstBinding;
|
|
uint32_t bindingCount;
|
|
const VkBuffer* pBuffers;
|
|
const VkDeviceSize* pOffsets;
|
|
const VkDeviceSize* pSizes;
|
|
const VkDeviceSize* pStrides;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&firstBinding, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&bindingCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkBuffer**)&pBuffers, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pBuffers);
|
|
*readStreamPtrPtr += 8;
|
|
if (pBuffers) {
|
|
vkReadStream->alloc((void**)&pBuffers,
|
|
((bindingCount)) * sizeof(const VkBuffer));
|
|
if (((bindingCount))) {
|
|
uint8_t* cgen_var_1_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((bindingCount));
|
|
for (uint32_t k = 0; k < ((bindingCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkBuffer*)pBuffers) + k) =
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)tmpval);
|
|
}
|
|
}
|
|
}
|
|
vkReadStream->alloc((void**)&pOffsets,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pOffsets, *readStreamPtrPtr,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
*readStreamPtrPtr += ((bindingCount)) * sizeof(const VkDeviceSize);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDeviceSize**)&pSizes, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSizes);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSizes) {
|
|
vkReadStream->alloc((void**)&pSizes,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pSizes, *readStreamPtrPtr,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
*readStreamPtrPtr += ((bindingCount)) * sizeof(const VkDeviceSize);
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDeviceSize**)&pStrides, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pStrides);
|
|
*readStreamPtrPtr += 8;
|
|
if (pStrides) {
|
|
vkReadStream->alloc((void**)&pStrides,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pStrides, *readStreamPtrPtr,
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
|
*readStreamPtrPtr += ((bindingCount)) * sizeof(const VkDeviceSize);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBindVertexBuffers2EXT 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)firstBinding, (unsigned long long)bindingCount,
|
|
(unsigned long long)pBuffers, (unsigned long long)pOffsets,
|
|
(unsigned long long)pSizes, (unsigned long long)pStrides);
|
|
}
|
|
vk->vkCmdBindVertexBuffers2EXT(unboxed_commandBuffer, firstBinding, bindingCount,
|
|
pBuffers, pOffsets, pSizes, pStrides);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBindVertexBuffers2EXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetDepthTestEnableEXT: {
|
|
android::base::beginTrace("vkCmdSetDepthTestEnableEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBool32 depthTestEnable;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkBool32*)&depthTestEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetDepthTestEnableEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)depthTestEnable);
|
|
}
|
|
vk->vkCmdSetDepthTestEnableEXT(unboxed_commandBuffer, depthTestEnable);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDepthTestEnableEXT(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, depthTestEnable);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetDepthWriteEnableEXT: {
|
|
android::base::beginTrace("vkCmdSetDepthWriteEnableEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBool32 depthWriteEnable;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkBool32*)&depthWriteEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetDepthWriteEnableEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)depthWriteEnable);
|
|
}
|
|
vk->vkCmdSetDepthWriteEnableEXT(unboxed_commandBuffer, depthWriteEnable);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDepthWriteEnableEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
depthWriteEnable);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetDepthCompareOpEXT: {
|
|
android::base::beginTrace("vkCmdSetDepthCompareOpEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkCompareOp depthCompareOp;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkCompareOp*)&depthCompareOp, *readStreamPtrPtr, sizeof(VkCompareOp));
|
|
*readStreamPtrPtr += sizeof(VkCompareOp);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetDepthCompareOpEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)depthCompareOp);
|
|
}
|
|
vk->vkCmdSetDepthCompareOpEXT(unboxed_commandBuffer, depthCompareOp);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDepthCompareOpEXT(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, depthCompareOp);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetDepthBoundsTestEnableEXT: {
|
|
android::base::beginTrace("vkCmdSetDepthBoundsTestEnableEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBool32 depthBoundsTestEnable;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkBool32*)&depthBoundsTestEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetDepthBoundsTestEnableEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)depthBoundsTestEnable);
|
|
}
|
|
vk->vkCmdSetDepthBoundsTestEnableEXT(unboxed_commandBuffer, depthBoundsTestEnable);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDepthBoundsTestEnableEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
depthBoundsTestEnable);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetStencilTestEnableEXT: {
|
|
android::base::beginTrace("vkCmdSetStencilTestEnableEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBool32 stencilTestEnable;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkBool32*)&stencilTestEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetStencilTestEnableEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)stencilTestEnable);
|
|
}
|
|
vk->vkCmdSetStencilTestEnableEXT(unboxed_commandBuffer, stencilTestEnable);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetStencilTestEnableEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
stencilTestEnable);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetStencilOpEXT: {
|
|
android::base::beginTrace("vkCmdSetStencilOpEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkStencilFaceFlags faceMask;
|
|
VkStencilOp failOp;
|
|
VkStencilOp passOp;
|
|
VkStencilOp depthFailOp;
|
|
VkCompareOp compareOp;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkStencilFaceFlags*)&faceMask, *readStreamPtrPtr,
|
|
sizeof(VkStencilFaceFlags));
|
|
*readStreamPtrPtr += sizeof(VkStencilFaceFlags);
|
|
memcpy((VkStencilOp*)&failOp, *readStreamPtrPtr, sizeof(VkStencilOp));
|
|
*readStreamPtrPtr += sizeof(VkStencilOp);
|
|
memcpy((VkStencilOp*)&passOp, *readStreamPtrPtr, sizeof(VkStencilOp));
|
|
*readStreamPtrPtr += sizeof(VkStencilOp);
|
|
memcpy((VkStencilOp*)&depthFailOp, *readStreamPtrPtr, sizeof(VkStencilOp));
|
|
*readStreamPtrPtr += sizeof(VkStencilOp);
|
|
memcpy((VkCompareOp*)&compareOp, *readStreamPtrPtr, sizeof(VkCompareOp));
|
|
*readStreamPtrPtr += sizeof(VkCompareOp);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetStencilOpEXT 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)faceMask, (unsigned long long)failOp,
|
|
(unsigned long long)passOp, (unsigned long long)depthFailOp,
|
|
(unsigned long long)compareOp);
|
|
}
|
|
vk->vkCmdSetStencilOpEXT(unboxed_commandBuffer, faceMask, failOp, passOp,
|
|
depthFailOp, compareOp);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetStencilOpEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, faceMask,
|
|
failOp, passOp, depthFailOp, compareOp);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_shader_atomic_float2
|
|
#endif
|
|
#ifdef VK_EXT_shader_demote_to_helper_invocation
|
|
#endif
|
|
#ifdef VK_NV_device_generated_commands
|
|
case OP_vkGetGeneratedCommandsMemoryRequirementsNV: {
|
|
android::base::beginTrace("vkGetGeneratedCommandsMemoryRequirementsNV decode");
|
|
VkDevice device;
|
|
const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo;
|
|
VkMemoryRequirements2* pMemoryRequirements;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkGeneratedCommandsMemoryRequirementsInfoNV));
|
|
reservedunmarshal_VkGeneratedCommandsMemoryRequirementsInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkGeneratedCommandsMemoryRequirementsInfoNV*)(pInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements2));
|
|
reservedunmarshal_VkMemoryRequirements2(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkGeneratedCommandsMemoryRequirementsInfoNV(
|
|
m_state, (VkGeneratedCommandsMemoryRequirementsInfoNV*)(pInfo));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetGeneratedCommandsMemoryRequirementsNV 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
vk->vkGetGeneratedCommandsMemoryRequirementsNV(unboxed_device, pInfo,
|
|
pMemoryRequirements);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements2(
|
|
m_state, (VkMemoryRequirements2*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements2(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements2*)(pMemoryRequirements));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetGeneratedCommandsMemoryRequirementsNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo,
|
|
pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdPreprocessGeneratedCommandsNV: {
|
|
android::base::beginTrace("vkCmdPreprocessGeneratedCommandsNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pGeneratedCommandsInfo,
|
|
sizeof(const VkGeneratedCommandsInfoNV));
|
|
reservedunmarshal_VkGeneratedCommandsInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkGeneratedCommandsInfoNV*)(pGeneratedCommandsInfo), readStreamPtrPtr);
|
|
if (pGeneratedCommandsInfo) {
|
|
transform_tohost_VkGeneratedCommandsInfoNV(
|
|
m_state, (VkGeneratedCommandsInfoNV*)(pGeneratedCommandsInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdPreprocessGeneratedCommandsNV 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pGeneratedCommandsInfo);
|
|
}
|
|
vk->vkCmdPreprocessGeneratedCommandsNV(unboxed_commandBuffer,
|
|
pGeneratedCommandsInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdPreprocessGeneratedCommandsNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pGeneratedCommandsInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdExecuteGeneratedCommandsNV: {
|
|
android::base::beginTrace("vkCmdExecuteGeneratedCommandsNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBool32 isPreprocessed;
|
|
const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkBool32*)&isPreprocessed, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
vkReadStream->alloc((void**)&pGeneratedCommandsInfo,
|
|
sizeof(const VkGeneratedCommandsInfoNV));
|
|
reservedunmarshal_VkGeneratedCommandsInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkGeneratedCommandsInfoNV*)(pGeneratedCommandsInfo), readStreamPtrPtr);
|
|
if (pGeneratedCommandsInfo) {
|
|
transform_tohost_VkGeneratedCommandsInfoNV(
|
|
m_state, (VkGeneratedCommandsInfoNV*)(pGeneratedCommandsInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdExecuteGeneratedCommandsNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)isPreprocessed,
|
|
(unsigned long long)pGeneratedCommandsInfo);
|
|
}
|
|
vk->vkCmdExecuteGeneratedCommandsNV(unboxed_commandBuffer, isPreprocessed,
|
|
pGeneratedCommandsInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdExecuteGeneratedCommandsNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
isPreprocessed, pGeneratedCommandsInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBindPipelineShaderGroupNV: {
|
|
android::base::beginTrace("vkCmdBindPipelineShaderGroupNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkPipelineBindPoint pipelineBindPoint;
|
|
VkPipeline pipeline;
|
|
uint32_t groupIndex;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkPipelineBindPoint*)&pipelineBindPoint, *readStreamPtrPtr,
|
|
sizeof(VkPipelineBindPoint));
|
|
*readStreamPtrPtr += sizeof(VkPipelineBindPoint);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&groupIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBindPipelineShaderGroupNV 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pipelineBindPoint, (unsigned long long)pipeline,
|
|
(unsigned long long)groupIndex);
|
|
}
|
|
vk->vkCmdBindPipelineShaderGroupNV(unboxed_commandBuffer, pipelineBindPoint,
|
|
pipeline, groupIndex);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBindPipelineShaderGroupNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pipelineBindPoint, pipeline, groupIndex);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateIndirectCommandsLayoutNV: {
|
|
android::base::beginTrace("vkCreateIndirectCommandsLayoutNV decode");
|
|
VkDevice device;
|
|
const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkIndirectCommandsLayoutNV* pIndirectCommandsLayout;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkIndirectCommandsLayoutCreateInfoNV));
|
|
reservedunmarshal_VkIndirectCommandsLayoutCreateInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkIndirectCommandsLayoutCreateInfoNV*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pIndirectCommandsLayout;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pIndirectCommandsLayout,
|
|
sizeof(VkIndirectCommandsLayoutNV));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkIndirectCommandsLayoutNV*)pIndirectCommandsLayout =
|
|
(VkIndirectCommandsLayoutNV)(VkIndirectCommandsLayoutNV)((
|
|
VkIndirectCommandsLayoutNV)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkIndirectCommandsLayoutCreateInfoNV(
|
|
m_state, (VkIndirectCommandsLayoutCreateInfoNV*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateIndirectCommandsLayoutNV 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator,
|
|
(unsigned long long)pIndirectCommandsLayout);
|
|
}
|
|
VkResult vkCreateIndirectCommandsLayoutNV_VkResult_return = (VkResult)0;
|
|
vkCreateIndirectCommandsLayoutNV_VkResult_return =
|
|
vk->vkCreateIndirectCommandsLayoutNV(unboxed_device, pCreateInfo, pAllocator,
|
|
pIndirectCommandsLayout);
|
|
if ((vkCreateIndirectCommandsLayoutNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateIndirectCommandsLayoutNV_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pIndirectCommandsLayout;
|
|
if (vkCreateIndirectCommandsLayoutNV_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkIndirectCommandsLayoutNV),
|
|
"handle map overwrite requires VkIndirectCommandsLayoutNV to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkIndirectCommandsLayoutNV(
|
|
(VkIndirectCommandsLayoutNV*)pIndirectCommandsLayout, 1);
|
|
vkStream->write((VkIndirectCommandsLayoutNV*)pIndirectCommandsLayout, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pIndirectCommandsLayout;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateIndirectCommandsLayoutNV_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateIndirectCommandsLayoutNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateIndirectCommandsLayoutNV_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pIndirectCommandsLayout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyIndirectCommandsLayoutNV: {
|
|
android::base::beginTrace("vkDestroyIndirectCommandsLayoutNV decode");
|
|
VkDevice device;
|
|
VkIndirectCommandsLayoutNV indirectCommandsLayout;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual non dispatchable handle destroy unboxing for indirectCommandsLayout;
|
|
VkIndirectCommandsLayoutNV boxed_indirectCommandsLayout_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkIndirectCommandsLayoutNV*)&indirectCommandsLayout =
|
|
(VkIndirectCommandsLayoutNV)(VkIndirectCommandsLayoutNV)((
|
|
VkIndirectCommandsLayoutNV)(*&cgen_var_1));
|
|
boxed_indirectCommandsLayout_preserve = indirectCommandsLayout;
|
|
indirectCommandsLayout = unbox_VkIndirectCommandsLayoutNV(indirectCommandsLayout);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkDestroyIndirectCommandsLayoutNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)indirectCommandsLayout, (unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyIndirectCommandsLayoutNV(unboxed_device, indirectCommandsLayout,
|
|
pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyIndirectCommandsLayoutNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_indirectCommandsLayout_preserve, pAllocator);
|
|
}
|
|
delete_VkIndirectCommandsLayoutNV(boxed_indirectCommandsLayout_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_inherited_viewport_scissor
|
|
#endif
|
|
#ifdef VK_EXT_texel_buffer_alignment
|
|
#endif
|
|
#ifdef VK_QCOM_render_pass_transform
|
|
#endif
|
|
#ifdef VK_EXT_device_memory_report
|
|
#endif
|
|
#ifdef VK_EXT_acquire_drm_display
|
|
case OP_vkAcquireDrmDisplayEXT: {
|
|
android::base::beginTrace("vkAcquireDrmDisplayEXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
int32_t drmFd;
|
|
VkDisplayKHR display;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((int32_t*)&drmFd, *readStreamPtrPtr, sizeof(int32_t));
|
|
*readStreamPtrPtr += sizeof(int32_t);
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayKHR*)&display =
|
|
(VkDisplayKHR)unbox_VkDisplayKHR((VkDisplayKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkAcquireDrmDisplayEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice, (unsigned long long)drmFd,
|
|
(unsigned long long)display);
|
|
}
|
|
VkResult vkAcquireDrmDisplayEXT_VkResult_return = (VkResult)0;
|
|
vkAcquireDrmDisplayEXT_VkResult_return =
|
|
vk->vkAcquireDrmDisplayEXT(unboxed_physicalDevice, drmFd, display);
|
|
if ((vkAcquireDrmDisplayEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAcquireDrmDisplayEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkAcquireDrmDisplayEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAcquireDrmDisplayEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAcquireDrmDisplayEXT_VkResult_return, physicalDevice, drmFd, display);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDrmDisplayEXT: {
|
|
android::base::beginTrace("vkGetDrmDisplayEXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
int32_t drmFd;
|
|
uint32_t connectorId;
|
|
VkDisplayKHR* display;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((int32_t*)&drmFd, *readStreamPtrPtr, sizeof(int32_t));
|
|
*readStreamPtrPtr += sizeof(int32_t);
|
|
memcpy((uint32_t*)&connectorId, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for display;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&display, sizeof(VkDisplayKHR));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDisplayKHR*)display =
|
|
(VkDisplayKHR)(VkDisplayKHR)((VkDisplayKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDrmDisplayEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice, (unsigned long long)drmFd,
|
|
(unsigned long long)connectorId, (unsigned long long)display);
|
|
}
|
|
VkResult vkGetDrmDisplayEXT_VkResult_return = (VkResult)0;
|
|
vkGetDrmDisplayEXT_VkResult_return =
|
|
vk->vkGetDrmDisplayEXT(unboxed_physicalDevice, drmFd, connectorId, display);
|
|
if ((vkGetDrmDisplayEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetDrmDisplayEXT_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_2;
|
|
vkStream->handleMapping()->mapHandles_VkDisplayKHR_u64(display, &cgen_var_2, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_2, 8);
|
|
vkStream->write(&vkGetDrmDisplayEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDrmDisplayEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDrmDisplayEXT_VkResult_return, physicalDevice, drmFd, connectorId,
|
|
display);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_robustness2
|
|
#endif
|
|
#ifdef VK_EXT_custom_border_color
|
|
#endif
|
|
#ifdef VK_GOOGLE_user_type
|
|
#endif
|
|
#ifdef VK_EXT_private_data
|
|
case OP_vkCreatePrivateDataSlotEXT: {
|
|
android::base::beginTrace("vkCreatePrivateDataSlotEXT decode");
|
|
VkDevice device;
|
|
const VkPrivateDataSlotCreateInfoEXT* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkPrivateDataSlotEXT* pPrivateDataSlot;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkPrivateDataSlotCreateInfoEXT));
|
|
reservedunmarshal_VkPrivateDataSlotCreateInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkPrivateDataSlotCreateInfoEXT*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPrivateDataSlot;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPrivateDataSlot, sizeof(VkPrivateDataSlotEXT));
|
|
memcpy((VkPrivateDataSlotEXT*)&(*pPrivateDataSlot), (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pPrivateDataSlot));
|
|
*readStreamPtrPtr += 8;
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkPrivateDataSlotCreateInfoEXT(
|
|
m_state, (VkPrivateDataSlotCreateInfoEXT*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreatePrivateDataSlotEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pPrivateDataSlot);
|
|
}
|
|
VkResult vkCreatePrivateDataSlotEXT_VkResult_return = (VkResult)0;
|
|
vkCreatePrivateDataSlotEXT_VkResult_return = vk->vkCreatePrivateDataSlotEXT(
|
|
unboxed_device, pCreateInfo, pAllocator, pPrivateDataSlot);
|
|
if ((vkCreatePrivateDataSlotEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreatePrivateDataSlotEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3 = (uint64_t)(*pPrivateDataSlot);
|
|
vkStream->putBe64(cgen_var_3);
|
|
vkStream->write(&vkCreatePrivateDataSlotEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreatePrivateDataSlotEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreatePrivateDataSlotEXT_VkResult_return, device, pCreateInfo, pAllocator,
|
|
pPrivateDataSlot);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyPrivateDataSlotEXT: {
|
|
android::base::beginTrace("vkDestroyPrivateDataSlotEXT decode");
|
|
VkDevice device;
|
|
VkPrivateDataSlotEXT privateDataSlot;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkPrivateDataSlotEXT*)&privateDataSlot, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&privateDataSlot);
|
|
*readStreamPtrPtr += 8;
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkDestroyPrivateDataSlotEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)privateDataSlot, (unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyPrivateDataSlotEXT(unboxed_device, privateDataSlot, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyPrivateDataSlotEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, privateDataSlot,
|
|
pAllocator);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkSetPrivateDataEXT: {
|
|
android::base::beginTrace("vkSetPrivateDataEXT decode");
|
|
VkDevice device;
|
|
VkObjectType objectType;
|
|
uint64_t objectHandle;
|
|
VkPrivateDataSlotEXT privateDataSlot;
|
|
uint64_t data;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkObjectType*)&objectType, *readStreamPtrPtr, sizeof(VkObjectType));
|
|
*readStreamPtrPtr += sizeof(VkObjectType);
|
|
memcpy((uint64_t*)&objectHandle, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
memcpy((VkPrivateDataSlotEXT*)&privateDataSlot, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&privateDataSlot);
|
|
*readStreamPtrPtr += 8;
|
|
memcpy((uint64_t*)&data, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkSetPrivateDataEXT 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)objectType,
|
|
(unsigned long long)objectHandle, (unsigned long long)privateDataSlot,
|
|
(unsigned long long)data);
|
|
}
|
|
VkResult vkSetPrivateDataEXT_VkResult_return = (VkResult)0;
|
|
vkSetPrivateDataEXT_VkResult_return = vk->vkSetPrivateDataEXT(
|
|
unboxed_device, objectType, objectHandle, privateDataSlot, data);
|
|
if ((vkSetPrivateDataEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkSetPrivateDataEXT_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkSetPrivateDataEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetPrivateDataEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkSetPrivateDataEXT_VkResult_return, device, objectType, objectHandle,
|
|
privateDataSlot, data);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPrivateDataEXT: {
|
|
android::base::beginTrace("vkGetPrivateDataEXT decode");
|
|
VkDevice device;
|
|
VkObjectType objectType;
|
|
uint64_t objectHandle;
|
|
VkPrivateDataSlotEXT privateDataSlot;
|
|
uint64_t* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkObjectType*)&objectType, *readStreamPtrPtr, sizeof(VkObjectType));
|
|
*readStreamPtrPtr += sizeof(VkObjectType);
|
|
memcpy((uint64_t*)&objectHandle, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
memcpy((VkPrivateDataSlotEXT*)&privateDataSlot, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&privateDataSlot);
|
|
*readStreamPtrPtr += 8;
|
|
// Begin manual dispatchable handle unboxing for pData;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pData, sizeof(uint64_t));
|
|
memcpy((uint64_t*)pData, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetPrivateDataEXT 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)objectType,
|
|
(unsigned long long)objectHandle, (unsigned long long)privateDataSlot,
|
|
(unsigned long long)pData);
|
|
}
|
|
vk->vkGetPrivateDataEXT(unboxed_device, objectType, objectHandle, privateDataSlot,
|
|
pData);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint64_t*)pData, sizeof(uint64_t));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPrivateDataEXT(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, device, objectType,
|
|
objectHandle, privateDataSlot, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_pipeline_creation_cache_control
|
|
#endif
|
|
#ifdef VK_NV_device_diagnostics_config
|
|
#endif
|
|
#ifdef VK_QCOM_render_pass_store_ops
|
|
#endif
|
|
#ifdef VK_NV_fragment_shading_rate_enums
|
|
case OP_vkCmdSetFragmentShadingRateEnumNV: {
|
|
android::base::beginTrace("vkCmdSetFragmentShadingRateEnumNV decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkFragmentShadingRateNV shadingRate;
|
|
VkFragmentShadingRateCombinerOpKHR combinerOps[2];
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkFragmentShadingRateNV*)&shadingRate, *readStreamPtrPtr,
|
|
sizeof(VkFragmentShadingRateNV));
|
|
*readStreamPtrPtr += sizeof(VkFragmentShadingRateNV);
|
|
memcpy((VkFragmentShadingRateCombinerOpKHR*)combinerOps, *readStreamPtrPtr,
|
|
2 * sizeof(const VkFragmentShadingRateCombinerOpKHR));
|
|
*readStreamPtrPtr += 2 * sizeof(const VkFragmentShadingRateCombinerOpKHR);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdSetFragmentShadingRateEnumNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)shadingRate, (unsigned long long)combinerOps);
|
|
}
|
|
vk->vkCmdSetFragmentShadingRateEnumNV(unboxed_commandBuffer, shadingRate,
|
|
combinerOps);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetFragmentShadingRateEnumNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, shadingRate,
|
|
combinerOps);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_ray_tracing_motion_blur
|
|
#endif
|
|
#ifdef VK_EXT_ycbcr_2plane_444_formats
|
|
#endif
|
|
#ifdef VK_EXT_fragment_density_map2
|
|
#endif
|
|
#ifdef VK_QCOM_rotated_copy_commands
|
|
#endif
|
|
#ifdef VK_EXT_image_robustness
|
|
#endif
|
|
#ifdef VK_EXT_4444_formats
|
|
#endif
|
|
#ifdef VK_EXT_rgba10x6_formats
|
|
#endif
|
|
#ifdef VK_NV_acquire_winrt_display
|
|
case OP_vkAcquireWinrtDisplayNV: {
|
|
android::base::beginTrace("vkAcquireWinrtDisplayNV decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
VkDisplayKHR display;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDisplayKHR*)&display =
|
|
(VkDisplayKHR)unbox_VkDisplayKHR((VkDisplayKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkAcquireWinrtDisplayNV 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)display);
|
|
}
|
|
VkResult vkAcquireWinrtDisplayNV_VkResult_return = (VkResult)0;
|
|
vkAcquireWinrtDisplayNV_VkResult_return =
|
|
vk->vkAcquireWinrtDisplayNV(unboxed_physicalDevice, display);
|
|
if ((vkAcquireWinrtDisplayNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkAcquireWinrtDisplayNV_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkAcquireWinrtDisplayNV_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkAcquireWinrtDisplayNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkAcquireWinrtDisplayNV_VkResult_return, physicalDevice, display);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetWinrtDisplayNV: {
|
|
android::base::beginTrace("vkGetWinrtDisplayNV decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t deviceRelativeId;
|
|
VkDisplayKHR* pDisplay;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((uint32_t*)&deviceRelativeId, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for pDisplay;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pDisplay, sizeof(VkDisplayKHR));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkDisplayKHR*)pDisplay =
|
|
(VkDisplayKHR)(VkDisplayKHR)((VkDisplayKHR)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetWinrtDisplayNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)deviceRelativeId, (unsigned long long)pDisplay);
|
|
}
|
|
VkResult vkGetWinrtDisplayNV_VkResult_return = (VkResult)0;
|
|
vkGetWinrtDisplayNV_VkResult_return =
|
|
vk->vkGetWinrtDisplayNV(unboxed_physicalDevice, deviceRelativeId, pDisplay);
|
|
if ((vkGetWinrtDisplayNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetWinrtDisplayNV_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_2;
|
|
vkStream->handleMapping()->mapHandles_VkDisplayKHR_u64(pDisplay, &cgen_var_2, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_2, 8);
|
|
vkStream->write(&vkGetWinrtDisplayNV_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetWinrtDisplayNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetWinrtDisplayNV_VkResult_return, physicalDevice, deviceRelativeId,
|
|
pDisplay);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_directfb_surface
|
|
case OP_vkCreateDirectFBSurfaceEXT: {
|
|
android::base::beginTrace("vkCreateDirectFBSurfaceEXT decode");
|
|
VkInstance instance;
|
|
const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkDirectFBSurfaceCreateInfoEXT));
|
|
reservedunmarshal_VkDirectFBSurfaceCreateInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDirectFBSurfaceCreateInfoEXT*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkDirectFBSurfaceCreateInfoEXT(
|
|
m_state, (VkDirectFBSurfaceCreateInfoEXT*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreateDirectFBSurfaceEXT 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateDirectFBSurfaceEXT_VkResult_return = (VkResult)0;
|
|
vkCreateDirectFBSurfaceEXT_VkResult_return = vk->vkCreateDirectFBSurfaceEXT(
|
|
unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateDirectFBSurfaceEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateDirectFBSurfaceEXT_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateDirectFBSurfaceEXT_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateDirectFBSurfaceEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateDirectFBSurfaceEXT_VkResult_return, instance, pCreateInfo,
|
|
pAllocator, pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceDirectFBPresentationSupportEXT: {
|
|
android::base::beginTrace(
|
|
"vkGetPhysicalDeviceDirectFBPresentationSupportEXT decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t queueFamilyIndex;
|
|
IDirectFB* dfb;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((uint32_t*)&queueFamilyIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for dfb;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&dfb, sizeof(IDirectFB));
|
|
memcpy((IDirectFB*)dfb, *readStreamPtrPtr, sizeof(IDirectFB));
|
|
*readStreamPtrPtr += sizeof(IDirectFB);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceDirectFBPresentationSupportEXT "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)queueFamilyIndex, (unsigned long long)dfb);
|
|
}
|
|
VkBool32 vkGetPhysicalDeviceDirectFBPresentationSupportEXT_VkBool32_return =
|
|
(VkBool32)0;
|
|
vkGetPhysicalDeviceDirectFBPresentationSupportEXT_VkBool32_return =
|
|
vk->vkGetPhysicalDeviceDirectFBPresentationSupportEXT(unboxed_physicalDevice,
|
|
queueFamilyIndex, dfb);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((IDirectFB*)dfb, sizeof(IDirectFB));
|
|
vkStream->write(&vkGetPhysicalDeviceDirectFBPresentationSupportEXT_VkBool32_return,
|
|
sizeof(VkBool32));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceDirectFBPresentationSupportEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceDirectFBPresentationSupportEXT_VkBool32_return,
|
|
physicalDevice, queueFamilyIndex, dfb);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_VALVE_mutable_descriptor_type
|
|
#endif
|
|
#ifdef VK_EXT_vertex_input_dynamic_state
|
|
case OP_vkCmdSetVertexInputEXT: {
|
|
android::base::beginTrace("vkCmdSetVertexInputEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t vertexBindingDescriptionCount;
|
|
const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions;
|
|
uint32_t vertexAttributeDescriptionCount;
|
|
const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&vertexBindingDescriptionCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pVertexBindingDescriptions,
|
|
((vertexBindingDescriptionCount)) *
|
|
sizeof(const VkVertexInputBindingDescription2EXT));
|
|
for (uint32_t i = 0; i < (uint32_t)((vertexBindingDescriptionCount)); ++i) {
|
|
reservedunmarshal_VkVertexInputBindingDescription2EXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVertexInputBindingDescription2EXT*)(pVertexBindingDescriptions + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
memcpy((uint32_t*)&vertexAttributeDescriptionCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pVertexAttributeDescriptions,
|
|
((vertexAttributeDescriptionCount)) *
|
|
sizeof(const VkVertexInputAttributeDescription2EXT));
|
|
for (uint32_t i = 0; i < (uint32_t)((vertexAttributeDescriptionCount)); ++i) {
|
|
reservedunmarshal_VkVertexInputAttributeDescription2EXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkVertexInputAttributeDescription2EXT*)(pVertexAttributeDescriptions + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pVertexBindingDescriptions) {
|
|
for (uint32_t i = 0; i < (uint32_t)((vertexBindingDescriptionCount)); ++i) {
|
|
transform_tohost_VkVertexInputBindingDescription2EXT(
|
|
m_state,
|
|
(VkVertexInputBindingDescription2EXT*)(pVertexBindingDescriptions + i));
|
|
}
|
|
}
|
|
if (pVertexAttributeDescriptions) {
|
|
for (uint32_t i = 0; i < (uint32_t)((vertexAttributeDescriptionCount)); ++i) {
|
|
transform_tohost_VkVertexInputAttributeDescription2EXT(
|
|
m_state,
|
|
(VkVertexInputAttributeDescription2EXT*)(pVertexAttributeDescriptions +
|
|
i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetVertexInputEXT 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)vertexBindingDescriptionCount,
|
|
(unsigned long long)pVertexBindingDescriptions,
|
|
(unsigned long long)vertexAttributeDescriptionCount,
|
|
(unsigned long long)pVertexAttributeDescriptions);
|
|
}
|
|
vk->vkCmdSetVertexInputEXT(unboxed_commandBuffer, vertexBindingDescriptionCount,
|
|
pVertexBindingDescriptions,
|
|
vertexAttributeDescriptionCount,
|
|
pVertexAttributeDescriptions);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetVertexInputEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
vertexBindingDescriptionCount, pVertexBindingDescriptions,
|
|
vertexAttributeDescriptionCount, pVertexAttributeDescriptions);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_physical_device_drm
|
|
#endif
|
|
#ifdef VK_EXT_primitive_topology_list_restart
|
|
#endif
|
|
#ifdef VK_FUCHSIA_external_memory
|
|
case OP_vkGetMemoryZirconHandleFUCHSIA: {
|
|
android::base::beginTrace("vkGetMemoryZirconHandleFUCHSIA decode");
|
|
VkDevice device;
|
|
const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo;
|
|
zx_handle_t* pZirconHandle;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pGetZirconHandleInfo,
|
|
sizeof(const VkMemoryGetZirconHandleInfoFUCHSIA));
|
|
reservedunmarshal_VkMemoryGetZirconHandleInfoFUCHSIA(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryGetZirconHandleInfoFUCHSIA*)(pGetZirconHandleInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pZirconHandle;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pZirconHandle, sizeof(zx_handle_t));
|
|
memcpy((zx_handle_t*)pZirconHandle, *readStreamPtrPtr, sizeof(zx_handle_t));
|
|
*readStreamPtrPtr += sizeof(zx_handle_t);
|
|
if (pGetZirconHandleInfo) {
|
|
transform_tohost_VkMemoryGetZirconHandleInfoFUCHSIA(
|
|
m_state, (VkMemoryGetZirconHandleInfoFUCHSIA*)(pGetZirconHandleInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetMemoryZirconHandleFUCHSIA 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pGetZirconHandleInfo,
|
|
(unsigned long long)pZirconHandle);
|
|
}
|
|
VkResult vkGetMemoryZirconHandleFUCHSIA_VkResult_return = (VkResult)0;
|
|
vkGetMemoryZirconHandleFUCHSIA_VkResult_return = vk->vkGetMemoryZirconHandleFUCHSIA(
|
|
unboxed_device, pGetZirconHandleInfo, pZirconHandle);
|
|
if ((vkGetMemoryZirconHandleFUCHSIA_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetMemoryZirconHandleFUCHSIA_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((zx_handle_t*)pZirconHandle, sizeof(zx_handle_t));
|
|
vkStream->write(&vkGetMemoryZirconHandleFUCHSIA_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryZirconHandleFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryZirconHandleFUCHSIA_VkResult_return, device,
|
|
pGetZirconHandleInfo, pZirconHandle);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetMemoryZirconHandlePropertiesFUCHSIA: {
|
|
android::base::beginTrace("vkGetMemoryZirconHandlePropertiesFUCHSIA decode");
|
|
VkDevice device;
|
|
VkExternalMemoryHandleTypeFlagBits handleType;
|
|
zx_handle_t zirconHandle;
|
|
VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkExternalMemoryHandleTypeFlagBits*)&handleType, *readStreamPtrPtr,
|
|
sizeof(VkExternalMemoryHandleTypeFlagBits));
|
|
*readStreamPtrPtr += sizeof(VkExternalMemoryHandleTypeFlagBits);
|
|
memcpy((zx_handle_t*)&zirconHandle, *readStreamPtrPtr, sizeof(zx_handle_t));
|
|
*readStreamPtrPtr += sizeof(zx_handle_t);
|
|
// Begin manual dispatchable handle unboxing for pMemoryZirconHandleProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryZirconHandleProperties,
|
|
sizeof(VkMemoryZirconHandlePropertiesFUCHSIA));
|
|
reservedunmarshal_VkMemoryZirconHandlePropertiesFUCHSIA(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryZirconHandlePropertiesFUCHSIA*)(pMemoryZirconHandleProperties),
|
|
readStreamPtrPtr);
|
|
if (pMemoryZirconHandleProperties) {
|
|
transform_tohost_VkMemoryZirconHandlePropertiesFUCHSIA(
|
|
m_state,
|
|
(VkMemoryZirconHandlePropertiesFUCHSIA*)(pMemoryZirconHandleProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetMemoryZirconHandlePropertiesFUCHSIA 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)handleType,
|
|
(unsigned long long)zirconHandle,
|
|
(unsigned long long)pMemoryZirconHandleProperties);
|
|
}
|
|
VkResult vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return = (VkResult)0;
|
|
vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return =
|
|
vk->vkGetMemoryZirconHandlePropertiesFUCHSIA(
|
|
unboxed_device, handleType, zirconHandle, pMemoryZirconHandleProperties);
|
|
if ((vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMemoryZirconHandleProperties) {
|
|
transform_fromhost_VkMemoryZirconHandlePropertiesFUCHSIA(
|
|
m_state,
|
|
(VkMemoryZirconHandlePropertiesFUCHSIA*)(pMemoryZirconHandleProperties));
|
|
}
|
|
marshal_VkMemoryZirconHandlePropertiesFUCHSIA(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryZirconHandlePropertiesFUCHSIA*)(pMemoryZirconHandleProperties));
|
|
vkStream->write(&vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryZirconHandlePropertiesFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryZirconHandlePropertiesFUCHSIA_VkResult_return, device,
|
|
handleType, zirconHandle, pMemoryZirconHandleProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_FUCHSIA_external_semaphore
|
|
case OP_vkImportSemaphoreZirconHandleFUCHSIA: {
|
|
android::base::beginTrace("vkImportSemaphoreZirconHandleFUCHSIA decode");
|
|
VkDevice device;
|
|
const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pImportSemaphoreZirconHandleInfo,
|
|
sizeof(const VkImportSemaphoreZirconHandleInfoFUCHSIA));
|
|
reservedunmarshal_VkImportSemaphoreZirconHandleInfoFUCHSIA(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImportSemaphoreZirconHandleInfoFUCHSIA*)(pImportSemaphoreZirconHandleInfo),
|
|
readStreamPtrPtr);
|
|
if (pImportSemaphoreZirconHandleInfo) {
|
|
transform_tohost_VkImportSemaphoreZirconHandleInfoFUCHSIA(
|
|
m_state,
|
|
(VkImportSemaphoreZirconHandleInfoFUCHSIA*)(pImportSemaphoreZirconHandleInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkImportSemaphoreZirconHandleFUCHSIA 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pImportSemaphoreZirconHandleInfo);
|
|
}
|
|
VkResult vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return = (VkResult)0;
|
|
vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return =
|
|
vk->vkImportSemaphoreZirconHandleFUCHSIA(unboxed_device,
|
|
pImportSemaphoreZirconHandleInfo);
|
|
if ((vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkImportSemaphoreZirconHandleFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkImportSemaphoreZirconHandleFUCHSIA_VkResult_return, device,
|
|
pImportSemaphoreZirconHandleInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetSemaphoreZirconHandleFUCHSIA: {
|
|
android::base::beginTrace("vkGetSemaphoreZirconHandleFUCHSIA decode");
|
|
VkDevice device;
|
|
const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo;
|
|
zx_handle_t* pZirconHandle;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pGetZirconHandleInfo,
|
|
sizeof(const VkSemaphoreGetZirconHandleInfoFUCHSIA));
|
|
reservedunmarshal_VkSemaphoreGetZirconHandleInfoFUCHSIA(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSemaphoreGetZirconHandleInfoFUCHSIA*)(pGetZirconHandleInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pZirconHandle;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pZirconHandle, sizeof(zx_handle_t));
|
|
memcpy((zx_handle_t*)pZirconHandle, *readStreamPtrPtr, sizeof(zx_handle_t));
|
|
*readStreamPtrPtr += sizeof(zx_handle_t);
|
|
if (pGetZirconHandleInfo) {
|
|
transform_tohost_VkSemaphoreGetZirconHandleInfoFUCHSIA(
|
|
m_state, (VkSemaphoreGetZirconHandleInfoFUCHSIA*)(pGetZirconHandleInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkGetSemaphoreZirconHandleFUCHSIA 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pGetZirconHandleInfo,
|
|
(unsigned long long)pZirconHandle);
|
|
}
|
|
VkResult vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return = (VkResult)0;
|
|
vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return =
|
|
vk->vkGetSemaphoreZirconHandleFUCHSIA(unboxed_device, pGetZirconHandleInfo,
|
|
pZirconHandle);
|
|
if ((vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((zx_handle_t*)pZirconHandle, sizeof(zx_handle_t));
|
|
vkStream->write(&vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetSemaphoreZirconHandleFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetSemaphoreZirconHandleFUCHSIA_VkResult_return, device,
|
|
pGetZirconHandleInfo, pZirconHandle);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_FUCHSIA_buffer_collection
|
|
case OP_vkCreateBufferCollectionFUCHSIA: {
|
|
android::base::beginTrace("vkCreateBufferCollectionFUCHSIA decode");
|
|
VkDevice device;
|
|
const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkBufferCollectionFUCHSIA* pCollection;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkBufferCollectionCreateInfoFUCHSIA));
|
|
reservedunmarshal_VkBufferCollectionCreateInfoFUCHSIA(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferCollectionCreateInfoFUCHSIA*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pCollection;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCollection, sizeof(VkBufferCollectionFUCHSIA));
|
|
memcpy((VkBufferCollectionFUCHSIA*)&(*pCollection), (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&(*pCollection));
|
|
*readStreamPtrPtr += 8;
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkBufferCollectionCreateInfoFUCHSIA(
|
|
m_state, (VkBufferCollectionCreateInfoFUCHSIA*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateBufferCollectionFUCHSIA 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pCollection);
|
|
}
|
|
VkResult vkCreateBufferCollectionFUCHSIA_VkResult_return = (VkResult)0;
|
|
vkCreateBufferCollectionFUCHSIA_VkResult_return =
|
|
vk->vkCreateBufferCollectionFUCHSIA(unboxed_device, pCreateInfo, pAllocator,
|
|
pCollection);
|
|
if ((vkCreateBufferCollectionFUCHSIA_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateBufferCollectionFUCHSIA_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3 = (uint64_t)(*pCollection);
|
|
vkStream->putBe64(cgen_var_3);
|
|
vkStream->write(&vkCreateBufferCollectionFUCHSIA_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateBufferCollectionFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateBufferCollectionFUCHSIA_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pCollection);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkSetBufferCollectionImageConstraintsFUCHSIA: {
|
|
android::base::beginTrace("vkSetBufferCollectionImageConstraintsFUCHSIA decode");
|
|
VkDevice device;
|
|
VkBufferCollectionFUCHSIA collection;
|
|
const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkBufferCollectionFUCHSIA*)&collection, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&collection);
|
|
*readStreamPtrPtr += 8;
|
|
vkReadStream->alloc((void**)&pImageConstraintsInfo,
|
|
sizeof(const VkImageConstraintsInfoFUCHSIA));
|
|
reservedunmarshal_VkImageConstraintsInfoFUCHSIA(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageConstraintsInfoFUCHSIA*)(pImageConstraintsInfo), readStreamPtrPtr);
|
|
if (pImageConstraintsInfo) {
|
|
transform_tohost_VkImageConstraintsInfoFUCHSIA(
|
|
m_state, (VkImageConstraintsInfoFUCHSIA*)(pImageConstraintsInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkSetBufferCollectionImageConstraintsFUCHSIA 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)collection,
|
|
(unsigned long long)pImageConstraintsInfo);
|
|
}
|
|
VkResult vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return = (VkResult)0;
|
|
vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return =
|
|
vk->vkSetBufferCollectionImageConstraintsFUCHSIA(unboxed_device, collection,
|
|
pImageConstraintsInfo);
|
|
if ((vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetBufferCollectionImageConstraintsFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkSetBufferCollectionImageConstraintsFUCHSIA_VkResult_return, device,
|
|
collection, pImageConstraintsInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkSetBufferCollectionBufferConstraintsFUCHSIA: {
|
|
android::base::beginTrace("vkSetBufferCollectionBufferConstraintsFUCHSIA decode");
|
|
VkDevice device;
|
|
VkBufferCollectionFUCHSIA collection;
|
|
const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkBufferCollectionFUCHSIA*)&collection, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&collection);
|
|
*readStreamPtrPtr += 8;
|
|
vkReadStream->alloc((void**)&pBufferConstraintsInfo,
|
|
sizeof(const VkBufferConstraintsInfoFUCHSIA));
|
|
reservedunmarshal_VkBufferConstraintsInfoFUCHSIA(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferConstraintsInfoFUCHSIA*)(pBufferConstraintsInfo), readStreamPtrPtr);
|
|
if (pBufferConstraintsInfo) {
|
|
transform_tohost_VkBufferConstraintsInfoFUCHSIA(
|
|
m_state, (VkBufferConstraintsInfoFUCHSIA*)(pBufferConstraintsInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkSetBufferCollectionBufferConstraintsFUCHSIA 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)collection,
|
|
(unsigned long long)pBufferConstraintsInfo);
|
|
}
|
|
VkResult vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return =
|
|
(VkResult)0;
|
|
vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return =
|
|
vk->vkSetBufferCollectionBufferConstraintsFUCHSIA(unboxed_device, collection,
|
|
pBufferConstraintsInfo);
|
|
if ((vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetBufferCollectionBufferConstraintsFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkSetBufferCollectionBufferConstraintsFUCHSIA_VkResult_return, device,
|
|
collection, pBufferConstraintsInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyBufferCollectionFUCHSIA: {
|
|
android::base::beginTrace("vkDestroyBufferCollectionFUCHSIA decode");
|
|
VkDevice device;
|
|
VkBufferCollectionFUCHSIA collection;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkBufferCollectionFUCHSIA*)&collection, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&collection);
|
|
*readStreamPtrPtr += 8;
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkDestroyBufferCollectionFUCHSIA 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)collection,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyBufferCollectionFUCHSIA(unboxed_device, collection, pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyBufferCollectionFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, collection,
|
|
pAllocator);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetBufferCollectionPropertiesFUCHSIA: {
|
|
android::base::beginTrace("vkGetBufferCollectionPropertiesFUCHSIA decode");
|
|
VkDevice device;
|
|
VkBufferCollectionFUCHSIA collection;
|
|
VkBufferCollectionPropertiesFUCHSIA* pProperties;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkBufferCollectionFUCHSIA*)&collection, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&collection);
|
|
*readStreamPtrPtr += 8;
|
|
// Begin manual dispatchable handle unboxing for pProperties;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pProperties,
|
|
sizeof(VkBufferCollectionPropertiesFUCHSIA));
|
|
reservedunmarshal_VkBufferCollectionPropertiesFUCHSIA(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferCollectionPropertiesFUCHSIA*)(pProperties), readStreamPtrPtr);
|
|
if (pProperties) {
|
|
transform_tohost_VkBufferCollectionPropertiesFUCHSIA(
|
|
m_state, (VkBufferCollectionPropertiesFUCHSIA*)(pProperties));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetBufferCollectionPropertiesFUCHSIA 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)collection,
|
|
(unsigned long long)pProperties);
|
|
}
|
|
VkResult vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return = (VkResult)0;
|
|
vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return =
|
|
vk->vkGetBufferCollectionPropertiesFUCHSIA(unboxed_device, collection,
|
|
pProperties);
|
|
if ((vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pProperties) {
|
|
transform_fromhost_VkBufferCollectionPropertiesFUCHSIA(
|
|
m_state, (VkBufferCollectionPropertiesFUCHSIA*)(pProperties));
|
|
}
|
|
marshal_VkBufferCollectionPropertiesFUCHSIA(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferCollectionPropertiesFUCHSIA*)(pProperties));
|
|
vkStream->write(&vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBufferCollectionPropertiesFUCHSIA(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetBufferCollectionPropertiesFUCHSIA_VkResult_return, device, collection,
|
|
pProperties);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_HUAWEI_subpass_shading
|
|
case OP_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI: {
|
|
android::base::beginTrace("vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI decode");
|
|
VkDevice device;
|
|
VkRenderPass renderpass;
|
|
VkExtent2D* pMaxWorkgroupSize;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkRenderPass*)&renderpass =
|
|
(VkRenderPass)unbox_VkRenderPass((VkRenderPass)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pMaxWorkgroupSize;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMaxWorkgroupSize, sizeof(VkExtent2D));
|
|
reservedunmarshal_VkExtent2D(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExtent2D*)(pMaxWorkgroupSize), readStreamPtrPtr);
|
|
if (pMaxWorkgroupSize) {
|
|
transform_tohost_VkExtent2D(m_state, (VkExtent2D*)(pMaxWorkgroupSize));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)renderpass,
|
|
(unsigned long long)pMaxWorkgroupSize);
|
|
}
|
|
VkResult vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return =
|
|
(VkResult)0;
|
|
vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return =
|
|
vk->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(unboxed_device, renderpass,
|
|
pMaxWorkgroupSize);
|
|
if ((vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
if (pMaxWorkgroupSize) {
|
|
transform_fromhost_VkExtent2D(m_state, (VkExtent2D*)(pMaxWorkgroupSize));
|
|
}
|
|
marshal_VkExtent2D(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkExtent2D*)(pMaxWorkgroupSize));
|
|
vkStream->write(&vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI_VkResult_return, device,
|
|
renderpass, pMaxWorkgroupSize);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSubpassShadingHUAWEI: {
|
|
android::base::beginTrace("vkCmdSubpassShadingHUAWEI decode");
|
|
VkCommandBuffer commandBuffer;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSubpassShadingHUAWEI 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer);
|
|
}
|
|
vk->vkCmdSubpassShadingHUAWEI(unboxed_commandBuffer);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSubpassShadingHUAWEI(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_HUAWEI_invocation_mask
|
|
case OP_vkCmdBindInvocationMaskHUAWEI: {
|
|
android::base::beginTrace("vkCmdBindInvocationMaskHUAWEI decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkImageView imageView;
|
|
VkImageLayout imageLayout;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImageView*)&imageView =
|
|
(VkImageView)unbox_VkImageView((VkImageView)(*&cgen_var_1));
|
|
memcpy((VkImageLayout*)&imageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBindInvocationMaskHUAWEI 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)imageView, (unsigned long long)imageLayout);
|
|
}
|
|
vk->vkCmdBindInvocationMaskHUAWEI(unboxed_commandBuffer, imageView, imageLayout);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBindInvocationMaskHUAWEI(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, imageView,
|
|
imageLayout);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_NV_external_memory_rdma
|
|
case OP_vkGetMemoryRemoteAddressNV: {
|
|
android::base::beginTrace("vkGetMemoryRemoteAddressNV decode");
|
|
VkDevice device;
|
|
const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo;
|
|
VkRemoteAddressNV* pAddress;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pMemoryGetRemoteAddressInfo,
|
|
sizeof(const VkMemoryGetRemoteAddressInfoNV));
|
|
reservedunmarshal_VkMemoryGetRemoteAddressInfoNV(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryGetRemoteAddressInfoNV*)(pMemoryGetRemoteAddressInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pAddress;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pAddress, sizeof(VkRemoteAddressNV));
|
|
memcpy((VkRemoteAddressNV*)pAddress, *readStreamPtrPtr, sizeof(VkRemoteAddressNV));
|
|
*readStreamPtrPtr += sizeof(VkRemoteAddressNV);
|
|
if (pMemoryGetRemoteAddressInfo) {
|
|
transform_tohost_VkMemoryGetRemoteAddressInfoNV(
|
|
m_state, (VkMemoryGetRemoteAddressInfoNV*)(pMemoryGetRemoteAddressInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetMemoryRemoteAddressNV 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)pMemoryGetRemoteAddressInfo,
|
|
(unsigned long long)pAddress);
|
|
}
|
|
VkResult vkGetMemoryRemoteAddressNV_VkResult_return = (VkResult)0;
|
|
vkGetMemoryRemoteAddressNV_VkResult_return = vk->vkGetMemoryRemoteAddressNV(
|
|
unboxed_device, pMemoryGetRemoteAddressInfo, pAddress);
|
|
if ((vkGetMemoryRemoteAddressNV_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetMemoryRemoteAddressNV_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((VkRemoteAddressNV*)pAddress, sizeof(VkRemoteAddressNV));
|
|
vkStream->write(&vkGetMemoryRemoteAddressNV_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryRemoteAddressNV(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryRemoteAddressNV_VkResult_return, device,
|
|
pMemoryGetRemoteAddressInfo, pAddress);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_extended_dynamic_state2
|
|
case OP_vkCmdSetPatchControlPointsEXT: {
|
|
android::base::beginTrace("vkCmdSetPatchControlPointsEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t patchControlPoints;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&patchControlPoints, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetPatchControlPointsEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)patchControlPoints);
|
|
}
|
|
vk->vkCmdSetPatchControlPointsEXT(unboxed_commandBuffer, patchControlPoints);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetPatchControlPointsEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
patchControlPoints);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetRasterizerDiscardEnableEXT: {
|
|
android::base::beginTrace("vkCmdSetRasterizerDiscardEnableEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBool32 rasterizerDiscardEnable;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkBool32*)&rasterizerDiscardEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetRasterizerDiscardEnableEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)rasterizerDiscardEnable);
|
|
}
|
|
vk->vkCmdSetRasterizerDiscardEnableEXT(unboxed_commandBuffer,
|
|
rasterizerDiscardEnable);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetRasterizerDiscardEnableEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
rasterizerDiscardEnable);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetDepthBiasEnableEXT: {
|
|
android::base::beginTrace("vkCmdSetDepthBiasEnableEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBool32 depthBiasEnable;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkBool32*)&depthBiasEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetDepthBiasEnableEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)depthBiasEnable);
|
|
}
|
|
vk->vkCmdSetDepthBiasEnableEXT(unboxed_commandBuffer, depthBiasEnable);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetDepthBiasEnableEXT(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool,
|
|
commandBuffer, depthBiasEnable);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetLogicOpEXT: {
|
|
android::base::beginTrace("vkCmdSetLogicOpEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkLogicOp logicOp;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkLogicOp*)&logicOp, *readStreamPtrPtr, sizeof(VkLogicOp));
|
|
*readStreamPtrPtr += sizeof(VkLogicOp);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkCmdSetLogicOpEXT 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)commandBuffer, (unsigned long long)logicOp);
|
|
}
|
|
vk->vkCmdSetLogicOpEXT(unboxed_commandBuffer, logicOp);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetLogicOpEXT(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, commandBuffer, logicOp);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetPrimitiveRestartEnableEXT: {
|
|
android::base::beginTrace("vkCmdSetPrimitiveRestartEnableEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkBool32 primitiveRestartEnable;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((VkBool32*)&primitiveRestartEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetPrimitiveRestartEnableEXT 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)primitiveRestartEnable);
|
|
}
|
|
vk->vkCmdSetPrimitiveRestartEnableEXT(unboxed_commandBuffer,
|
|
primitiveRestartEnable);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetPrimitiveRestartEnableEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
primitiveRestartEnable);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_QNX_screen_surface
|
|
case OP_vkCreateScreenSurfaceQNX: {
|
|
android::base::beginTrace("vkCreateScreenSurfaceQNX decode");
|
|
VkInstance instance;
|
|
const VkScreenSurfaceCreateInfoQNX* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkSurfaceKHR* pSurface;
|
|
// Begin non wrapped dispatchable handle unboxing for instance;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkInstance*)&instance = (VkInstance)(VkInstance)((VkInstance)(*&cgen_var_0));
|
|
auto unboxed_instance = unbox_VkInstance(instance);
|
|
auto vk = dispatch_VkInstance(instance);
|
|
// End manual dispatchable handle unboxing for instance;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkScreenSurfaceCreateInfoQNX));
|
|
reservedunmarshal_VkScreenSurfaceCreateInfoQNX(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkScreenSurfaceCreateInfoQNX*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSurface;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSurface, sizeof(VkSurfaceKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkSurfaceKHR*)pSurface =
|
|
(VkSurfaceKHR)(VkSurfaceKHR)((VkSurfaceKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkScreenSurfaceCreateInfoQNX(
|
|
m_state, (VkScreenSurfaceCreateInfoQNX*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCreateScreenSurfaceQNX 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)instance, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pSurface);
|
|
}
|
|
VkResult vkCreateScreenSurfaceQNX_VkResult_return = (VkResult)0;
|
|
vkCreateScreenSurfaceQNX_VkResult_return = vk->vkCreateScreenSurfaceQNX(
|
|
unboxed_instance, pCreateInfo, pAllocator, pSurface);
|
|
if ((vkCreateScreenSurfaceQNX_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateScreenSurfaceQNX_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_3, 1);
|
|
vkStream->write((uint64_t*)&cgen_var_3, 8);
|
|
vkStream->write(&vkCreateScreenSurfaceQNX_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateScreenSurfaceQNX(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateScreenSurfaceQNX_VkResult_return, instance, pCreateInfo, pAllocator,
|
|
pSurface);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetPhysicalDeviceScreenPresentationSupportQNX: {
|
|
android::base::beginTrace("vkGetPhysicalDeviceScreenPresentationSupportQNX decode");
|
|
VkPhysicalDevice physicalDevice;
|
|
uint32_t queueFamilyIndex;
|
|
_screen_window* window;
|
|
// Begin non wrapped dispatchable handle unboxing for physicalDevice;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPhysicalDevice*)&physicalDevice =
|
|
(VkPhysicalDevice)(VkPhysicalDevice)((VkPhysicalDevice)(*&cgen_var_0));
|
|
auto unboxed_physicalDevice = unbox_VkPhysicalDevice(physicalDevice);
|
|
auto vk = dispatch_VkPhysicalDevice(physicalDevice);
|
|
// End manual dispatchable handle unboxing for physicalDevice;
|
|
memcpy((uint32_t*)&queueFamilyIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for window;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&window, sizeof(_screen_window));
|
|
memcpy((_screen_window*)window, *readStreamPtrPtr, sizeof(_screen_window));
|
|
*readStreamPtrPtr += sizeof(_screen_window);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetPhysicalDeviceScreenPresentationSupportQNX "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)physicalDevice,
|
|
(unsigned long long)queueFamilyIndex, (unsigned long long)window);
|
|
}
|
|
VkBool32 vkGetPhysicalDeviceScreenPresentationSupportQNX_VkBool32_return =
|
|
(VkBool32)0;
|
|
vkGetPhysicalDeviceScreenPresentationSupportQNX_VkBool32_return =
|
|
vk->vkGetPhysicalDeviceScreenPresentationSupportQNX(unboxed_physicalDevice,
|
|
queueFamilyIndex, window);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((_screen_window*)window, sizeof(_screen_window));
|
|
vkStream->write(&vkGetPhysicalDeviceScreenPresentationSupportQNX_VkBool32_return,
|
|
sizeof(VkBool32));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetPhysicalDeviceScreenPresentationSupportQNX(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetPhysicalDeviceScreenPresentationSupportQNX_VkBool32_return,
|
|
physicalDevice, queueFamilyIndex, window);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_color_write_enable
|
|
case OP_vkCmdSetColorWriteEnableEXT: {
|
|
android::base::beginTrace("vkCmdSetColorWriteEnableEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t attachmentCount;
|
|
const VkBool32* pColorWriteEnables;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&attachmentCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pColorWriteEnables,
|
|
((attachmentCount)) * sizeof(const VkBool32));
|
|
memcpy((VkBool32*)pColorWriteEnables, *readStreamPtrPtr,
|
|
((attachmentCount)) * sizeof(const VkBool32));
|
|
*readStreamPtrPtr += ((attachmentCount)) * sizeof(const VkBool32);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdSetColorWriteEnableEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)attachmentCount,
|
|
(unsigned long long)pColorWriteEnables);
|
|
}
|
|
vk->vkCmdSetColorWriteEnableEXT(unboxed_commandBuffer, attachmentCount,
|
|
pColorWriteEnables);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetColorWriteEnableEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
attachmentCount, pColorWriteEnables);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_GOOGLE_gfxstream
|
|
case OP_vkMapMemoryIntoAddressSpaceGOOGLE: {
|
|
android::base::beginTrace("vkMapMemoryIntoAddressSpaceGOOGLE decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
uint64_t* pAddress;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pAddress;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint64_t**)&pAddress, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAddress);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAddress) {
|
|
vkReadStream->alloc((void**)&pAddress, sizeof(uint64_t));
|
|
memcpy((uint64_t*)pAddress, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkMapMemoryIntoAddressSpaceGOOGLE 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memory,
|
|
(unsigned long long)pAddress);
|
|
}
|
|
VkResult vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return = (VkResult)0;
|
|
vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return =
|
|
m_state->on_vkMapMemoryIntoAddressSpaceGOOGLE(&m_pool, device, memory,
|
|
pAddress);
|
|
if ((vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pAddress;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pAddress) {
|
|
vkStream->write((uint64_t*)pAddress, sizeof(uint64_t));
|
|
}
|
|
vkStream->write(&vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkMapMemoryIntoAddressSpaceGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, device, memory,
|
|
pAddress);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkUpdateDescriptorSetWithTemplateSizedGOOGLE: {
|
|
android::base::beginTrace("vkUpdateDescriptorSetWithTemplateSizedGOOGLE decode");
|
|
VkDevice device;
|
|
VkDescriptorSet descriptorSet;
|
|
VkDescriptorUpdateTemplate descriptorUpdateTemplate;
|
|
uint32_t imageInfoCount;
|
|
uint32_t bufferInfoCount;
|
|
uint32_t bufferViewCount;
|
|
const uint32_t* pImageInfoEntryIndices;
|
|
const uint32_t* pBufferInfoEntryIndices;
|
|
const uint32_t* pBufferViewEntryIndices;
|
|
const VkDescriptorImageInfo* pImageInfos;
|
|
const VkDescriptorBufferInfo* pBufferInfos;
|
|
const VkBufferView* pBufferViews;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorSet*)&descriptorSet =
|
|
(VkDescriptorSet)unbox_VkDescriptorSet((VkDescriptorSet)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate =
|
|
(VkDescriptorUpdateTemplate)unbox_VkDescriptorUpdateTemplate(
|
|
(VkDescriptorUpdateTemplate)(*&cgen_var_2));
|
|
memcpy((uint32_t*)&imageInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&bufferInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&bufferViewCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pImageInfoEntryIndices, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pImageInfoEntryIndices);
|
|
*readStreamPtrPtr += 8;
|
|
if (pImageInfoEntryIndices) {
|
|
vkReadStream->alloc((void**)&pImageInfoEntryIndices,
|
|
((imageInfoCount)) * sizeof(const uint32_t));
|
|
memcpy((uint32_t*)pImageInfoEntryIndices, *readStreamPtrPtr,
|
|
((imageInfoCount)) * sizeof(const uint32_t));
|
|
*readStreamPtrPtr += ((imageInfoCount)) * sizeof(const uint32_t);
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pBufferInfoEntryIndices, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pBufferInfoEntryIndices);
|
|
*readStreamPtrPtr += 8;
|
|
if (pBufferInfoEntryIndices) {
|
|
vkReadStream->alloc((void**)&pBufferInfoEntryIndices,
|
|
((bufferInfoCount)) * sizeof(const uint32_t));
|
|
memcpy((uint32_t*)pBufferInfoEntryIndices, *readStreamPtrPtr,
|
|
((bufferInfoCount)) * sizeof(const uint32_t));
|
|
*readStreamPtrPtr += ((bufferInfoCount)) * sizeof(const uint32_t);
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pBufferViewEntryIndices, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pBufferViewEntryIndices);
|
|
*readStreamPtrPtr += 8;
|
|
if (pBufferViewEntryIndices) {
|
|
vkReadStream->alloc((void**)&pBufferViewEntryIndices,
|
|
((bufferViewCount)) * sizeof(const uint32_t));
|
|
memcpy((uint32_t*)pBufferViewEntryIndices, *readStreamPtrPtr,
|
|
((bufferViewCount)) * sizeof(const uint32_t));
|
|
*readStreamPtrPtr += ((bufferViewCount)) * sizeof(const uint32_t);
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDescriptorImageInfo**)&pImageInfos, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pImageInfos);
|
|
*readStreamPtrPtr += 8;
|
|
if (pImageInfos) {
|
|
vkReadStream->alloc((void**)&pImageInfos,
|
|
((imageInfoCount)) * sizeof(const VkDescriptorImageInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
|
|
reservedunmarshal_VkDescriptorImageInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorImageInfo*)(pImageInfos + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkDescriptorBufferInfo**)&pBufferInfos, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pBufferInfos);
|
|
*readStreamPtrPtr += 8;
|
|
if (pBufferInfos) {
|
|
vkReadStream->alloc((void**)&pBufferInfos,
|
|
((bufferInfoCount)) * sizeof(const VkDescriptorBufferInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
|
|
reservedunmarshal_VkDescriptorBufferInfo(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkDescriptorBufferInfo*)(pBufferInfos + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkBufferView**)&pBufferViews, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pBufferViews);
|
|
*readStreamPtrPtr += 8;
|
|
if (pBufferViews) {
|
|
vkReadStream->alloc((void**)&pBufferViews,
|
|
((bufferViewCount)) * sizeof(const VkBufferView));
|
|
if (((bufferViewCount))) {
|
|
uint8_t* cgen_var_8_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((bufferViewCount));
|
|
for (uint32_t k = 0; k < ((bufferViewCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_8_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkBufferView*)pBufferViews) + k) =
|
|
(VkBufferView)unbox_VkBufferView((VkBufferView)tmpval);
|
|
}
|
|
}
|
|
}
|
|
if (pImageInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
|
|
transform_tohost_VkDescriptorImageInfo(
|
|
m_state, (VkDescriptorImageInfo*)(pImageInfos + i));
|
|
}
|
|
}
|
|
if (pBufferInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
|
|
transform_tohost_VkDescriptorBufferInfo(
|
|
m_state, (VkDescriptorBufferInfo*)(pBufferInfos + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkUpdateDescriptorSetWithTemplateSizedGOOGLE 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)descriptorSet,
|
|
(unsigned long long)descriptorUpdateTemplate,
|
|
(unsigned long long)imageInfoCount, (unsigned long long)bufferInfoCount,
|
|
(unsigned long long)bufferViewCount,
|
|
(unsigned long long)pImageInfoEntryIndices,
|
|
(unsigned long long)pBufferInfoEntryIndices,
|
|
(unsigned long long)pBufferViewEntryIndices,
|
|
(unsigned long long)pImageInfos, (unsigned long long)pBufferInfos,
|
|
(unsigned long long)pBufferViews);
|
|
}
|
|
m_state->on_vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
|
|
&m_pool, device, descriptorSet, descriptorUpdateTemplate, imageInfoCount,
|
|
bufferInfoCount, bufferViewCount, pImageInfoEntryIndices,
|
|
pBufferInfoEntryIndices, pBufferViewEntryIndices, pImageInfos, pBufferInfos,
|
|
pBufferViews);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, descriptorSet,
|
|
descriptorUpdateTemplate, imageInfoCount, bufferInfoCount, bufferViewCount,
|
|
pImageInfoEntryIndices, pBufferInfoEntryIndices, pBufferViewEntryIndices,
|
|
pImageInfos, pBufferInfos, pBufferViews);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBeginCommandBufferAsyncGOOGLE: {
|
|
android::base::beginTrace("vkBeginCommandBufferAsyncGOOGLE decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCommandBufferBeginInfo* pBeginInfo;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pBeginInfo, sizeof(const VkCommandBufferBeginInfo));
|
|
reservedunmarshal_VkCommandBufferBeginInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCommandBufferBeginInfo*)(pBeginInfo),
|
|
readStreamPtrPtr);
|
|
if (pBeginInfo) {
|
|
transform_tohost_VkCommandBufferBeginInfo(
|
|
m_state, (VkCommandBufferBeginInfo*)(pBeginInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkBeginCommandBufferAsyncGOOGLE 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pBeginInfo);
|
|
}
|
|
m_state->on_vkBeginCommandBufferAsyncGOOGLE(&m_pool, commandBuffer, pBeginInfo,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBeginCommandBufferAsyncGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, pBeginInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkEndCommandBufferAsyncGOOGLE: {
|
|
android::base::beginTrace("vkEndCommandBufferAsyncGOOGLE decode");
|
|
VkCommandBuffer commandBuffer;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkEndCommandBufferAsyncGOOGLE 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer);
|
|
}
|
|
m_state->on_vkEndCommandBufferAsyncGOOGLE(&m_pool, commandBuffer, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkEndCommandBufferAsyncGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkResetCommandBufferAsyncGOOGLE: {
|
|
android::base::beginTrace("vkResetCommandBufferAsyncGOOGLE decode");
|
|
VkCommandBuffer commandBuffer;
|
|
VkCommandBufferResetFlags flags;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
memcpy((VkCommandBufferResetFlags*)&flags, *readStreamPtrPtr,
|
|
sizeof(VkCommandBufferResetFlags));
|
|
*readStreamPtrPtr += sizeof(VkCommandBufferResetFlags);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkResetCommandBufferAsyncGOOGLE 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)flags);
|
|
}
|
|
m_state->on_vkResetCommandBufferAsyncGOOGLE(&m_pool, commandBuffer, flags);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkResetCommandBufferAsyncGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, flags);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCommandBufferHostSyncGOOGLE: {
|
|
android::base::beginTrace("vkCommandBufferHostSyncGOOGLE decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t needHostSync;
|
|
uint32_t sequenceNumber;
|
|
// Begin global wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&needHostSync, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&sequenceNumber, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCommandBufferHostSyncGOOGLE 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)needHostSync, (unsigned long long)sequenceNumber);
|
|
}
|
|
m_state->on_vkCommandBufferHostSyncGOOGLE(&m_pool, commandBuffer, needHostSync,
|
|
sequenceNumber);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCommandBufferHostSyncGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
needHostSync, sequenceNumber);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateImageWithRequirementsGOOGLE: {
|
|
android::base::beginTrace("vkCreateImageWithRequirementsGOOGLE decode");
|
|
VkDevice device;
|
|
const VkImageCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkImage* pImage;
|
|
VkMemoryRequirements* pMemoryRequirements;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkImageCreateInfo));
|
|
reservedunmarshal_VkImageCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pImage;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pImage, sizeof(VkImage));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkImage*)pImage = (VkImage)(VkImage)((VkImage)(*&cgen_var_2));
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements));
|
|
reservedunmarshal_VkMemoryRequirements(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements*)(pMemoryRequirements),
|
|
readStreamPtrPtr);
|
|
if (pCreateInfo) {
|
|
m_state->transformImpl_VkImageCreateInfo_tohost(pCreateInfo, 1);
|
|
transform_tohost_VkImageCreateInfo(m_state, (VkImageCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements(
|
|
m_state, (VkMemoryRequirements*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateImageWithRequirementsGOOGLE 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pImage,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
VkResult vkCreateImageWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
|
|
vkCreateImageWithRequirementsGOOGLE_VkResult_return =
|
|
m_state->on_vkCreateImageWithRequirementsGOOGLE(
|
|
&m_pool, device, pCreateInfo, pAllocator, pImage, pMemoryRequirements);
|
|
if ((vkCreateImageWithRequirementsGOOGLE_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateImageWithRequirementsGOOGLE_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pImage;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkImage),
|
|
"handle map overwrite requires VkImage to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkImage((VkImage*)pImage, 1);
|
|
vkStream->write((VkImage*)pImage, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pImage;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements(
|
|
m_state, (VkMemoryRequirements*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements*)(pMemoryRequirements));
|
|
vkStream->write(&vkCreateImageWithRequirementsGOOGLE_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateImageWithRequirementsGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateImageWithRequirementsGOOGLE_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pImage, pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateBufferWithRequirementsGOOGLE: {
|
|
android::base::beginTrace("vkCreateBufferWithRequirementsGOOGLE decode");
|
|
VkDevice device;
|
|
const VkBufferCreateInfo* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkBuffer* pBuffer;
|
|
VkMemoryRequirements* pMemoryRequirements;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkBufferCreateInfo));
|
|
reservedunmarshal_VkBufferCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBufferCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pBuffer;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pBuffer, sizeof(VkBuffer));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkBuffer*)pBuffer = (VkBuffer)(VkBuffer)((VkBuffer)(*&cgen_var_2));
|
|
// Begin manual dispatchable handle unboxing for pMemoryRequirements;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pMemoryRequirements, sizeof(VkMemoryRequirements));
|
|
reservedunmarshal_VkMemoryRequirements(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements*)(pMemoryRequirements),
|
|
readStreamPtrPtr);
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkBufferCreateInfo(m_state,
|
|
(VkBufferCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (pMemoryRequirements) {
|
|
transform_tohost_VkMemoryRequirements(
|
|
m_state, (VkMemoryRequirements*)(pMemoryRequirements));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateBufferWithRequirementsGOOGLE 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator, (unsigned long long)pBuffer,
|
|
(unsigned long long)pMemoryRequirements);
|
|
}
|
|
VkResult vkCreateBufferWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
|
|
vkCreateBufferWithRequirementsGOOGLE_VkResult_return =
|
|
m_state->on_vkCreateBufferWithRequirementsGOOGLE(
|
|
&m_pool, device, pCreateInfo, pAllocator, pBuffer, pMemoryRequirements);
|
|
if ((vkCreateBufferWithRequirementsGOOGLE_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateBufferWithRequirementsGOOGLE_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin manual non dispatchable handle create for pBuffer;
|
|
vkStream->unsetHandleMapping();
|
|
uint64_t cgen_var_3;
|
|
static_assert(8 == sizeof(VkBuffer),
|
|
"handle map overwrite requires VkBuffer to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkBuffer((VkBuffer*)pBuffer, 1);
|
|
vkStream->write((VkBuffer*)pBuffer, 8 * 1);
|
|
// Begin manual non dispatchable handle create for pBuffer;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
if (pMemoryRequirements) {
|
|
transform_fromhost_VkMemoryRequirements(
|
|
m_state, (VkMemoryRequirements*)(pMemoryRequirements));
|
|
}
|
|
marshal_VkMemoryRequirements(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMemoryRequirements*)(pMemoryRequirements));
|
|
vkStream->write(&vkCreateBufferWithRequirementsGOOGLE_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateBufferWithRequirementsGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateBufferWithRequirementsGOOGLE_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pBuffer, pMemoryRequirements);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetMemoryHostAddressInfoGOOGLE: {
|
|
android::base::beginTrace("vkGetMemoryHostAddressInfoGOOGLE decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
uint64_t* pAddress;
|
|
uint64_t* pSize;
|
|
uint64_t* pHostmemId;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pAddress;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint64_t**)&pAddress, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAddress);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAddress) {
|
|
vkReadStream->alloc((void**)&pAddress, sizeof(uint64_t));
|
|
memcpy((uint64_t*)pAddress, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSize;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint64_t**)&pSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pSize);
|
|
*readStreamPtrPtr += 8;
|
|
if (pSize) {
|
|
vkReadStream->alloc((void**)&pSize, sizeof(uint64_t));
|
|
memcpy((uint64_t*)pSize, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pHostmemId;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint64_t**)&pHostmemId, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pHostmemId);
|
|
*readStreamPtrPtr += 8;
|
|
if (pHostmemId) {
|
|
vkReadStream->alloc((void**)&pHostmemId, sizeof(uint64_t));
|
|
memcpy((uint64_t*)pHostmemId, *readStreamPtrPtr, sizeof(uint64_t));
|
|
*readStreamPtrPtr += sizeof(uint64_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetMemoryHostAddressInfoGOOGLE 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memory,
|
|
(unsigned long long)pAddress, (unsigned long long)pSize,
|
|
(unsigned long long)pHostmemId);
|
|
}
|
|
VkResult vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = (VkResult)0;
|
|
vkGetMemoryHostAddressInfoGOOGLE_VkResult_return =
|
|
m_state->on_vkGetMemoryHostAddressInfoGOOGLE(&m_pool, device, memory, pAddress,
|
|
pSize, pHostmemId);
|
|
if ((vkGetMemoryHostAddressInfoGOOGLE_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetMemoryHostAddressInfoGOOGLE_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_5 = (uint64_t)(uintptr_t)pAddress;
|
|
vkStream->putBe64(cgen_var_5);
|
|
if (pAddress) {
|
|
vkStream->write((uint64_t*)pAddress, sizeof(uint64_t));
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_6 = (uint64_t)(uintptr_t)pSize;
|
|
vkStream->putBe64(cgen_var_6);
|
|
if (pSize) {
|
|
vkStream->write((uint64_t*)pSize, sizeof(uint64_t));
|
|
}
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_7 = (uint64_t)(uintptr_t)pHostmemId;
|
|
vkStream->putBe64(cgen_var_7);
|
|
if (pHostmemId) {
|
|
vkStream->write((uint64_t*)pHostmemId, sizeof(uint64_t));
|
|
}
|
|
vkStream->write(&vkGetMemoryHostAddressInfoGOOGLE_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetMemoryHostAddressInfoGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetMemoryHostAddressInfoGOOGLE_VkResult_return, device, memory, pAddress,
|
|
pSize, pHostmemId);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkFreeMemorySyncGOOGLE: {
|
|
android::base::beginTrace("vkFreeMemorySyncGOOGLE decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
// Begin manual non dispatchable handle destroy unboxing for memory;
|
|
VkDeviceMemory boxed_memory_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)(VkDeviceMemory)((VkDeviceMemory)(*&cgen_var_1));
|
|
boxed_memory_preserve = memory;
|
|
memory = unbox_VkDeviceMemory(memory);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkFreeMemorySyncGOOGLE 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memory,
|
|
(unsigned long long)pAllocator);
|
|
}
|
|
VkResult vkFreeMemorySyncGOOGLE_VkResult_return = (VkResult)0;
|
|
vkFreeMemorySyncGOOGLE_VkResult_return =
|
|
m_state->on_vkFreeMemorySyncGOOGLE(&m_pool, device, memory, pAllocator);
|
|
if ((vkFreeMemorySyncGOOGLE_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkFreeMemorySyncGOOGLE_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkFreeMemorySyncGOOGLE_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkFreeMemorySyncGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkFreeMemorySyncGOOGLE_VkResult_return, device, boxed_memory_preserve,
|
|
pAllocator);
|
|
}
|
|
delete_VkDeviceMemory(boxed_memory_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueHostSyncGOOGLE: {
|
|
android::base::beginTrace("vkQueueHostSyncGOOGLE decode");
|
|
VkQueue queue;
|
|
uint32_t needHostSync;
|
|
uint32_t sequenceNumber;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&needHostSync, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&sequenceNumber, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkQueueHostSyncGOOGLE 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)needHostSync,
|
|
(unsigned long long)sequenceNumber);
|
|
}
|
|
m_state->on_vkQueueHostSyncGOOGLE(&m_pool, queue, needHostSync, sequenceNumber);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueHostSyncGOOGLE(snapshotTraceBegin,
|
|
snapshotTraceBytes, &m_pool, queue,
|
|
needHostSync, sequenceNumber);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueSubmitAsyncGOOGLE: {
|
|
android::base::beginTrace("vkQueueSubmitAsyncGOOGLE decode");
|
|
VkQueue queue;
|
|
uint32_t submitCount;
|
|
const VkSubmitInfo* pSubmits;
|
|
VkFence fence;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&submitCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pSubmits,
|
|
((submitCount)) * sizeof(const VkSubmitInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
|
|
reservedunmarshal_VkSubmitInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkSubmitInfo*)(pSubmits + i), readStreamPtrPtr);
|
|
}
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFence*)&fence = (VkFence)unbox_VkFence((VkFence)(*&cgen_var_1));
|
|
if (pSubmits) {
|
|
for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
|
|
transform_tohost_VkSubmitInfo(m_state, (VkSubmitInfo*)(pSubmits + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkQueueSubmitAsyncGOOGLE 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)submitCount,
|
|
(unsigned long long)pSubmits, (unsigned long long)fence);
|
|
}
|
|
m_state->on_vkQueueSubmitAsyncGOOGLE(&m_pool, queue, submitCount, pSubmits, fence);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueSubmitAsyncGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue, submitCount,
|
|
pSubmits, fence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueWaitIdleAsyncGOOGLE: {
|
|
android::base::beginTrace("vkQueueWaitIdleAsyncGOOGLE decode");
|
|
VkQueue queue;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkQueueWaitIdleAsyncGOOGLE 0x%llx \n",
|
|
ioStream, (unsigned long long)queue);
|
|
}
|
|
m_state->on_vkQueueWaitIdleAsyncGOOGLE(&m_pool, queue);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueWaitIdleAsyncGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueBindSparseAsyncGOOGLE: {
|
|
android::base::beginTrace("vkQueueBindSparseAsyncGOOGLE decode");
|
|
VkQueue queue;
|
|
uint32_t bindInfoCount;
|
|
const VkBindSparseInfo* pBindInfo;
|
|
VkFence fence;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&bindInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pBindInfo,
|
|
((bindInfoCount)) * sizeof(const VkBindSparseInfo));
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
reservedunmarshal_VkBindSparseInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkBindSparseInfo*)(pBindInfo + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkFence*)&fence = (VkFence)unbox_VkFence((VkFence)(*&cgen_var_1));
|
|
if (pBindInfo) {
|
|
for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
|
|
transform_tohost_VkBindSparseInfo(m_state,
|
|
(VkBindSparseInfo*)(pBindInfo + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkQueueBindSparseAsyncGOOGLE 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)bindInfoCount,
|
|
(unsigned long long)pBindInfo, (unsigned long long)fence);
|
|
}
|
|
m_state->on_vkQueueBindSparseAsyncGOOGLE(&m_pool, queue, bindInfoCount, pBindInfo,
|
|
fence);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueBindSparseAsyncGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue, bindInfoCount,
|
|
pBindInfo, fence);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetLinearImageLayoutGOOGLE: {
|
|
android::base::beginTrace("vkGetLinearImageLayoutGOOGLE decode");
|
|
VkDevice device;
|
|
VkFormat format;
|
|
VkDeviceSize* pOffset;
|
|
VkDeviceSize* pRowPitchAlignment;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
memcpy((VkFormat*)&format, *readStreamPtrPtr, sizeof(VkFormat));
|
|
*readStreamPtrPtr += sizeof(VkFormat);
|
|
// Begin manual dispatchable handle unboxing for pOffset;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pOffset, sizeof(VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
// Begin manual dispatchable handle unboxing for pRowPitchAlignment;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pRowPitchAlignment, sizeof(VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pRowPitchAlignment, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetLinearImageLayoutGOOGLE 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)format,
|
|
(unsigned long long)pOffset, (unsigned long long)pRowPitchAlignment);
|
|
}
|
|
m_state->on_vkGetLinearImageLayoutGOOGLE(&m_pool, device, format, pOffset,
|
|
pRowPitchAlignment);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
|
|
vkStream->write((VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetLinearImageLayoutGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, format, pOffset,
|
|
pRowPitchAlignment);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetLinearImageLayout2GOOGLE: {
|
|
android::base::beginTrace("vkGetLinearImageLayout2GOOGLE decode");
|
|
VkDevice device;
|
|
const VkImageCreateInfo* pCreateInfo;
|
|
VkDeviceSize* pOffset;
|
|
VkDeviceSize* pRowPitchAlignment;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
vkReadStream->alloc((void**)&pCreateInfo, sizeof(const VkImageCreateInfo));
|
|
reservedunmarshal_VkImageCreateInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkImageCreateInfo*)(pCreateInfo),
|
|
readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pOffset;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pOffset, sizeof(VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
// Begin manual dispatchable handle unboxing for pRowPitchAlignment;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pRowPitchAlignment, sizeof(VkDeviceSize));
|
|
memcpy((VkDeviceSize*)pRowPitchAlignment, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
if (pCreateInfo) {
|
|
m_state->transformImpl_VkImageCreateInfo_tohost(pCreateInfo, 1);
|
|
transform_tohost_VkImageCreateInfo(m_state, (VkImageCreateInfo*)(pCreateInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetLinearImageLayout2GOOGLE 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pOffset, (unsigned long long)pRowPitchAlignment);
|
|
}
|
|
m_state->on_vkGetLinearImageLayout2GOOGLE(&m_pool, device, pCreateInfo, pOffset,
|
|
pRowPitchAlignment);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
|
|
vkStream->write((VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetLinearImageLayout2GOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pCreateInfo,
|
|
pOffset, pRowPitchAlignment);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueFlushCommandsGOOGLE: {
|
|
android::base::beginTrace("vkQueueFlushCommandsGOOGLE decode");
|
|
VkQueue queue;
|
|
VkCommandBuffer commandBuffer;
|
|
VkDeviceSize dataSize;
|
|
const void* pData;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
// No unbox for commandBuffer
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_1));
|
|
memcpy((VkDeviceSize*)&dataSize, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
vkReadStream->alloc((void**)&pData, ((dataSize)) * sizeof(const uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, ((dataSize)) * sizeof(const uint8_t));
|
|
*readStreamPtrPtr += ((dataSize)) * sizeof(const uint8_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkQueueFlushCommandsGOOGLE 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)commandBuffer,
|
|
(unsigned long long)dataSize, (unsigned long long)pData);
|
|
}
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
m_state->on_vkQueueFlushCommandsGOOGLE(&m_pool, queue, commandBuffer, dataSize,
|
|
pData, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueFlushCommandsGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue, commandBuffer,
|
|
dataSize, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueCommitDescriptorSetUpdatesGOOGLE: {
|
|
android::base::beginTrace("vkQueueCommitDescriptorSetUpdatesGOOGLE decode");
|
|
VkQueue queue;
|
|
uint32_t descriptorPoolCount;
|
|
const VkDescriptorPool* pDescriptorPools;
|
|
uint32_t descriptorSetCount;
|
|
const VkDescriptorSetLayout* pSetLayouts;
|
|
const uint64_t* pDescriptorSetPoolIds;
|
|
const uint32_t* pDescriptorSetWhichPool;
|
|
const uint32_t* pDescriptorSetPendingAllocation;
|
|
const uint32_t* pDescriptorWriteStartingIndices;
|
|
uint32_t pendingDescriptorWriteCount;
|
|
const VkWriteDescriptorSet* pPendingDescriptorWrites;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&descriptorPoolCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pDescriptorPools,
|
|
((descriptorPoolCount)) * sizeof(const VkDescriptorPool));
|
|
if (((descriptorPoolCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((descriptorPoolCount));
|
|
for (uint32_t k = 0; k < ((descriptorPoolCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkDescriptorPool*)pDescriptorPools) + k) =
|
|
(VkDescriptorPool)unbox_VkDescriptorPool((VkDescriptorPool)tmpval);
|
|
}
|
|
}
|
|
memcpy((uint32_t*)&descriptorSetCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc((void**)&pSetLayouts,
|
|
((descriptorSetCount)) * sizeof(const VkDescriptorSetLayout));
|
|
if (((descriptorSetCount))) {
|
|
uint8_t* cgen_var_2_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((descriptorSetCount));
|
|
for (uint32_t k = 0; k < ((descriptorSetCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_2_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkDescriptorSetLayout*)pSetLayouts) + k) =
|
|
(VkDescriptorSetLayout)unbox_VkDescriptorSetLayout(
|
|
(VkDescriptorSetLayout)tmpval);
|
|
}
|
|
}
|
|
vkReadStream->alloc((void**)&pDescriptorSetPoolIds,
|
|
((descriptorSetCount)) * sizeof(const uint64_t));
|
|
memcpy((uint64_t*)pDescriptorSetPoolIds, *readStreamPtrPtr,
|
|
((descriptorSetCount)) * sizeof(const uint64_t));
|
|
*readStreamPtrPtr += ((descriptorSetCount)) * sizeof(const uint64_t);
|
|
vkReadStream->alloc((void**)&pDescriptorSetWhichPool,
|
|
((descriptorSetCount)) * sizeof(const uint32_t));
|
|
memcpy((uint32_t*)pDescriptorSetWhichPool, *readStreamPtrPtr,
|
|
((descriptorSetCount)) * sizeof(const uint32_t));
|
|
*readStreamPtrPtr += ((descriptorSetCount)) * sizeof(const uint32_t);
|
|
vkReadStream->alloc((void**)&pDescriptorSetPendingAllocation,
|
|
((descriptorSetCount)) * sizeof(const uint32_t));
|
|
memcpy((uint32_t*)pDescriptorSetPendingAllocation, *readStreamPtrPtr,
|
|
((descriptorSetCount)) * sizeof(const uint32_t));
|
|
*readStreamPtrPtr += ((descriptorSetCount)) * sizeof(const uint32_t);
|
|
vkReadStream->alloc((void**)&pDescriptorWriteStartingIndices,
|
|
((descriptorSetCount)) * sizeof(const uint32_t));
|
|
memcpy((uint32_t*)pDescriptorWriteStartingIndices, *readStreamPtrPtr,
|
|
((descriptorSetCount)) * sizeof(const uint32_t));
|
|
*readStreamPtrPtr += ((descriptorSetCount)) * sizeof(const uint32_t);
|
|
memcpy((uint32_t*)&pendingDescriptorWriteCount, *readStreamPtrPtr,
|
|
sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pPendingDescriptorWrites,
|
|
((pendingDescriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
|
|
for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
|
|
reservedunmarshal_VkWriteDescriptorSet(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkWriteDescriptorSet*)(pPendingDescriptorWrites + i), readStreamPtrPtr);
|
|
}
|
|
if (pPendingDescriptorWrites) {
|
|
for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
|
|
transform_tohost_VkWriteDescriptorSet(
|
|
m_state, (VkWriteDescriptorSet*)(pPendingDescriptorWrites + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkQueueCommitDescriptorSetUpdatesGOOGLE 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue,
|
|
(unsigned long long)descriptorPoolCount,
|
|
(unsigned long long)pDescriptorPools,
|
|
(unsigned long long)descriptorSetCount, (unsigned long long)pSetLayouts,
|
|
(unsigned long long)pDescriptorSetPoolIds,
|
|
(unsigned long long)pDescriptorSetWhichPool,
|
|
(unsigned long long)pDescriptorSetPendingAllocation,
|
|
(unsigned long long)pDescriptorWriteStartingIndices,
|
|
(unsigned long long)pendingDescriptorWriteCount,
|
|
(unsigned long long)pPendingDescriptorWrites);
|
|
}
|
|
m_state->on_vkQueueCommitDescriptorSetUpdatesGOOGLE(
|
|
&m_pool, queue, descriptorPoolCount, pDescriptorPools, descriptorSetCount,
|
|
pSetLayouts, pDescriptorSetPoolIds, pDescriptorSetWhichPool,
|
|
pDescriptorSetPendingAllocation, pDescriptorWriteStartingIndices,
|
|
pendingDescriptorWriteCount, pPendingDescriptorWrites);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueCommitDescriptorSetUpdatesGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue, descriptorPoolCount,
|
|
pDescriptorPools, descriptorSetCount, pSetLayouts, pDescriptorSetPoolIds,
|
|
pDescriptorSetWhichPool, pDescriptorSetPendingAllocation,
|
|
pDescriptorWriteStartingIndices, pendingDescriptorWriteCount,
|
|
pPendingDescriptorWrites);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCollectDescriptorPoolIdsGOOGLE: {
|
|
android::base::beginTrace("vkCollectDescriptorPoolIdsGOOGLE decode");
|
|
VkDevice device;
|
|
VkDescriptorPool descriptorPool;
|
|
uint32_t* pPoolIdCount;
|
|
uint64_t* pPoolIds;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDescriptorPool*)&descriptorPool =
|
|
(VkDescriptorPool)unbox_VkDescriptorPool((VkDescriptorPool)(*&cgen_var_1));
|
|
// Begin manual dispatchable handle unboxing for pPoolIdCount;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPoolIdCount, sizeof(uint32_t));
|
|
memcpy((uint32_t*)pPoolIdCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// Begin manual dispatchable handle unboxing for pPoolIds;
|
|
vkReadStream->unsetHandleMapping();
|
|
// WARNING PTR CHECK
|
|
memcpy((uint64_t**)&pPoolIds, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pPoolIds);
|
|
*readStreamPtrPtr += 8;
|
|
if (pPoolIds) {
|
|
vkReadStream->alloc((void**)&pPoolIds, (*(pPoolIdCount)) * sizeof(uint64_t));
|
|
memcpy((uint64_t*)pPoolIds, *readStreamPtrPtr,
|
|
(*(pPoolIdCount)) * sizeof(uint64_t));
|
|
*readStreamPtrPtr += (*(pPoolIdCount)) * sizeof(uint64_t);
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCollectDescriptorPoolIdsGOOGLE 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)descriptorPool, (unsigned long long)pPoolIdCount,
|
|
(unsigned long long)pPoolIds);
|
|
}
|
|
m_state->on_vkCollectDescriptorPoolIdsGOOGLE(&m_pool, device, descriptorPool,
|
|
pPoolIdCount, pPoolIds);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((uint32_t*)pPoolIdCount, sizeof(uint32_t));
|
|
// WARNING PTR CHECK
|
|
uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pPoolIds;
|
|
vkStream->putBe64(cgen_var_3);
|
|
if (pPoolIds) {
|
|
vkStream->write((uint64_t*)pPoolIds, (*(pPoolIdCount)) * sizeof(uint64_t));
|
|
}
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCollectDescriptorPoolIdsGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, descriptorPool,
|
|
pPoolIdCount, pPoolIds);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE: {
|
|
android::base::beginTrace("vkQueueSignalReleaseImageANDROIDAsyncGOOGLE decode");
|
|
VkQueue queue;
|
|
uint32_t waitSemaphoreCount;
|
|
const VkSemaphore* pWaitSemaphores;
|
|
VkImage image;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
memcpy((uint32_t*)&waitSemaphoreCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkSemaphore**)&pWaitSemaphores, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pWaitSemaphores);
|
|
*readStreamPtrPtr += 8;
|
|
if (pWaitSemaphores) {
|
|
vkReadStream->alloc((void**)&pWaitSemaphores,
|
|
((waitSemaphoreCount)) * sizeof(const VkSemaphore));
|
|
if (((waitSemaphoreCount))) {
|
|
uint8_t* cgen_var_1_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((waitSemaphoreCount));
|
|
for (uint32_t k = 0; k < ((waitSemaphoreCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_0_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkSemaphore*)pWaitSemaphores) + k) =
|
|
(VkSemaphore)unbox_VkSemaphore((VkSemaphore)tmpval);
|
|
}
|
|
}
|
|
}
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_2));
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkQueueSignalReleaseImageANDROIDAsyncGOOGLE 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue,
|
|
(unsigned long long)waitSemaphoreCount,
|
|
(unsigned long long)pWaitSemaphores, (unsigned long long)image);
|
|
}
|
|
m_state->on_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(
|
|
&m_pool, queue, waitSemaphoreCount, pWaitSemaphores, image);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue, waitSemaphoreCount,
|
|
pWaitSemaphores, image);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkQueueFlushCommandsFromAuxMemoryGOOGLE: {
|
|
android::base::beginTrace("vkQueueFlushCommandsFromAuxMemoryGOOGLE decode");
|
|
VkQueue queue;
|
|
VkCommandBuffer commandBuffer;
|
|
VkDeviceMemory deviceMemory;
|
|
VkDeviceSize dataOffset;
|
|
VkDeviceSize dataSize;
|
|
// Begin global wrapped dispatchable handle unboxing for queue;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueue*)&queue = (VkQueue)(VkQueue)((VkQueue)(*&cgen_var_0));
|
|
// No unbox for commandBuffer
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_1));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&deviceMemory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_2));
|
|
memcpy((VkDeviceSize*)&dataOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
memcpy((VkDeviceSize*)&dataSize, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkQueueFlushCommandsFromAuxMemoryGOOGLE 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)queue, (unsigned long long)commandBuffer,
|
|
(unsigned long long)deviceMemory, (unsigned long long)dataOffset,
|
|
(unsigned long long)dataSize);
|
|
}
|
|
m_state->on_vkQueueFlushCommandsFromAuxMemoryGOOGLE(
|
|
&m_pool, queue, commandBuffer, deviceMemory, dataOffset, dataSize, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkQueueFlushCommandsFromAuxMemoryGOOGLE(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, queue, commandBuffer,
|
|
deviceMemory, dataOffset, dataSize);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetBlobGOOGLE: {
|
|
android::base::beginTrace("vkGetBlobGOOGLE decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
// Begin global wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_1));
|
|
if (m_logCalls) {
|
|
fprintf(stderr, "stream %p: call vkGetBlobGOOGLE 0x%llx 0x%llx \n", ioStream,
|
|
(unsigned long long)device, (unsigned long long)memory);
|
|
}
|
|
VkResult vkGetBlobGOOGLE_VkResult_return = (VkResult)0;
|
|
vkGetBlobGOOGLE_VkResult_return =
|
|
m_state->on_vkGetBlobGOOGLE(&m_pool, device, memory);
|
|
if ((vkGetBlobGOOGLE_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkGetBlobGOOGLE_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetBlobGOOGLE_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetBlobGOOGLE(snapshotTraceBegin, snapshotTraceBytes,
|
|
&m_pool, vkGetBlobGOOGLE_VkResult_return,
|
|
device, memory);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_global_priority_query
|
|
#endif
|
|
#ifdef VK_EXT_multi_draw
|
|
case OP_vkCmdDrawMultiEXT: {
|
|
android::base::beginTrace("vkCmdDrawMultiEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t drawCount;
|
|
const VkMultiDrawInfoEXT* pVertexInfo;
|
|
uint32_t instanceCount;
|
|
uint32_t firstInstance;
|
|
uint32_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&drawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkMultiDrawInfoEXT**)&pVertexInfo, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pVertexInfo);
|
|
*readStreamPtrPtr += 8;
|
|
if (pVertexInfo) {
|
|
vkReadStream->alloc((void**)&pVertexInfo,
|
|
((drawCount)) * sizeof(const VkMultiDrawInfoEXT));
|
|
for (uint32_t i = 0; i < (uint32_t)((drawCount)); ++i) {
|
|
reservedunmarshal_VkMultiDrawInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMultiDrawInfoEXT*)(pVertexInfo + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
memcpy((uint32_t*)&instanceCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&firstInstance, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (pVertexInfo) {
|
|
for (uint32_t i = 0; i < (uint32_t)((drawCount)); ++i) {
|
|
transform_tohost_VkMultiDrawInfoEXT(m_state,
|
|
(VkMultiDrawInfoEXT*)(pVertexInfo + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawMultiEXT 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)drawCount, (unsigned long long)pVertexInfo,
|
|
(unsigned long long)instanceCount, (unsigned long long)firstInstance,
|
|
(unsigned long long)stride);
|
|
}
|
|
vk->vkCmdDrawMultiEXT(unboxed_commandBuffer, drawCount, pVertexInfo, instanceCount,
|
|
firstInstance, stride);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawMultiEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, drawCount,
|
|
pVertexInfo, instanceCount, firstInstance, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdDrawMultiIndexedEXT: {
|
|
android::base::beginTrace("vkCmdDrawMultiIndexedEXT decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t drawCount;
|
|
const VkMultiDrawIndexedInfoEXT* pIndexInfo;
|
|
uint32_t instanceCount;
|
|
uint32_t firstInstance;
|
|
uint32_t stride;
|
|
const int32_t* pVertexOffset;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&drawCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkMultiDrawIndexedInfoEXT**)&pIndexInfo, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pIndexInfo);
|
|
*readStreamPtrPtr += 8;
|
|
if (pIndexInfo) {
|
|
vkReadStream->alloc((void**)&pIndexInfo,
|
|
((drawCount)) * sizeof(const VkMultiDrawIndexedInfoEXT));
|
|
for (uint32_t i = 0; i < (uint32_t)((drawCount)); ++i) {
|
|
reservedunmarshal_VkMultiDrawIndexedInfoEXT(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkMultiDrawIndexedInfoEXT*)(pIndexInfo + i), readStreamPtrPtr);
|
|
}
|
|
}
|
|
memcpy((uint32_t*)&instanceCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&firstInstance, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&stride, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
// WARNING PTR CHECK
|
|
memcpy((int32_t**)&pVertexOffset, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pVertexOffset);
|
|
*readStreamPtrPtr += 8;
|
|
if (pVertexOffset) {
|
|
vkReadStream->alloc((void**)&pVertexOffset, sizeof(const int32_t));
|
|
memcpy((int32_t*)pVertexOffset, *readStreamPtrPtr, sizeof(const int32_t));
|
|
*readStreamPtrPtr += sizeof(const int32_t);
|
|
}
|
|
if (pIndexInfo) {
|
|
for (uint32_t i = 0; i < (uint32_t)((drawCount)); ++i) {
|
|
transform_tohost_VkMultiDrawIndexedInfoEXT(
|
|
m_state, (VkMultiDrawIndexedInfoEXT*)(pIndexInfo + i));
|
|
}
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdDrawMultiIndexedEXT 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)drawCount, (unsigned long long)pIndexInfo,
|
|
(unsigned long long)instanceCount, (unsigned long long)firstInstance,
|
|
(unsigned long long)stride, (unsigned long long)pVertexOffset);
|
|
}
|
|
vk->vkCmdDrawMultiIndexedEXT(unboxed_commandBuffer, drawCount, pIndexInfo,
|
|
instanceCount, firstInstance, stride, pVertexOffset);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdDrawMultiIndexedEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, drawCount,
|
|
pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_EXT_load_store_op_none
|
|
#endif
|
|
#ifdef VK_EXT_border_color_swizzle
|
|
#endif
|
|
#ifdef VK_EXT_pageable_device_local_memory
|
|
case OP_vkSetDeviceMemoryPriorityEXT: {
|
|
android::base::beginTrace("vkSetDeviceMemoryPriorityEXT decode");
|
|
VkDevice device;
|
|
VkDeviceMemory memory;
|
|
float priority;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDeviceMemory*)&memory =
|
|
(VkDeviceMemory)unbox_VkDeviceMemory((VkDeviceMemory)(*&cgen_var_1));
|
|
memcpy((float*)&priority, *readStreamPtrPtr, sizeof(float));
|
|
*readStreamPtrPtr += sizeof(float);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkSetDeviceMemoryPriorityEXT 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)memory,
|
|
(unsigned long long)priority);
|
|
}
|
|
vk->vkSetDeviceMemoryPriorityEXT(unboxed_device, memory, priority);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkSetDeviceMemoryPriorityEXT(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, memory, priority);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_acceleration_structure
|
|
case OP_vkCreateAccelerationStructureKHR: {
|
|
android::base::beginTrace("vkCreateAccelerationStructureKHR decode");
|
|
VkDevice device;
|
|
const VkAccelerationStructureCreateInfoKHR* pCreateInfo;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkAccelerationStructureKHR* pAccelerationStructure;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pCreateInfo,
|
|
sizeof(const VkAccelerationStructureCreateInfoKHR));
|
|
reservedunmarshal_VkAccelerationStructureCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureCreateInfoKHR*)(pCreateInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pAccelerationStructure;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pAccelerationStructure,
|
|
sizeof(VkAccelerationStructureKHR));
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 8);
|
|
*readStreamPtrPtr += 8;
|
|
*(VkAccelerationStructureKHR*)pAccelerationStructure =
|
|
(VkAccelerationStructureKHR)(VkAccelerationStructureKHR)((
|
|
VkAccelerationStructureKHR)(*&cgen_var_2));
|
|
if (pCreateInfo) {
|
|
transform_tohost_VkAccelerationStructureCreateInfoKHR(
|
|
m_state, (VkAccelerationStructureCreateInfoKHR*)(pCreateInfo));
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateAccelerationStructureKHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pCreateInfo,
|
|
(unsigned long long)pAllocator,
|
|
(unsigned long long)pAccelerationStructure);
|
|
}
|
|
VkResult vkCreateAccelerationStructureKHR_VkResult_return = (VkResult)0;
|
|
vkCreateAccelerationStructureKHR_VkResult_return =
|
|
vk->vkCreateAccelerationStructureKHR(unboxed_device, pCreateInfo, pAllocator,
|
|
pAccelerationStructure);
|
|
if ((vkCreateAccelerationStructureKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateAccelerationStructureKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
// Begin auto non dispatchable handle create for pAccelerationStructure;
|
|
if (vkCreateAccelerationStructureKHR_VkResult_return == VK_SUCCESS)
|
|
vkStream->setHandleMapping(&m_boxedHandleCreateMapping);
|
|
uint64_t cgen_var_3;
|
|
static_assert(
|
|
8 == sizeof(VkAccelerationStructureKHR),
|
|
"handle map overwrite requires VkAccelerationStructureKHR to be 8 bytes long");
|
|
vkStream->handleMapping()->mapHandles_VkAccelerationStructureKHR(
|
|
(VkAccelerationStructureKHR*)pAccelerationStructure, 1);
|
|
vkStream->write((VkAccelerationStructureKHR*)pAccelerationStructure, 8 * 1);
|
|
// Begin auto non dispatchable handle create for pAccelerationStructure;
|
|
vkStream->setHandleMapping(&m_boxedHandleUnwrapMapping);
|
|
vkStream->write(&vkCreateAccelerationStructureKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateAccelerationStructureKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateAccelerationStructureKHR_VkResult_return, device, pCreateInfo,
|
|
pAllocator, pAccelerationStructure);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkDestroyAccelerationStructureKHR: {
|
|
android::base::beginTrace("vkDestroyAccelerationStructureKHR decode");
|
|
VkDevice device;
|
|
VkAccelerationStructureKHR accelerationStructure;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
// Begin manual non dispatchable handle destroy unboxing for accelerationStructure;
|
|
VkAccelerationStructureKHR boxed_accelerationStructure_preserve;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkAccelerationStructureKHR*)&accelerationStructure =
|
|
(VkAccelerationStructureKHR)(VkAccelerationStructureKHR)((
|
|
VkAccelerationStructureKHR)(*&cgen_var_1));
|
|
boxed_accelerationStructure_preserve = accelerationStructure;
|
|
accelerationStructure = unbox_VkAccelerationStructureKHR(accelerationStructure);
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkDestroyAccelerationStructureKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)accelerationStructure, (unsigned long long)pAllocator);
|
|
}
|
|
vk->vkDestroyAccelerationStructureKHR(unboxed_device, accelerationStructure,
|
|
pAllocator);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkDestroyAccelerationStructureKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device,
|
|
boxed_accelerationStructure_preserve, pAllocator);
|
|
}
|
|
delete_VkAccelerationStructureKHR(boxed_accelerationStructure_preserve);
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBuildAccelerationStructuresKHR: {
|
|
android::base::beginTrace("vkCmdBuildAccelerationStructuresKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t infoCount;
|
|
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos;
|
|
const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&infoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pInfos,
|
|
((infoCount)) * sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i) {
|
|
reservedunmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i) {
|
|
transform_tohost_VkAccelerationStructureBuildGeometryInfoKHR(
|
|
m_state, (VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i));
|
|
}
|
|
}
|
|
(void)ppBuildRangeInfos;
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBuildAccelerationStructuresKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)infoCount, (unsigned long long)pInfos,
|
|
(unsigned long long)ppBuildRangeInfos);
|
|
}
|
|
vk->vkCmdBuildAccelerationStructuresKHR(unboxed_commandBuffer, infoCount, pInfos,
|
|
ppBuildRangeInfos);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBuildAccelerationStructuresKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, infoCount,
|
|
pInfos, ppBuildRangeInfos);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdBuildAccelerationStructuresIndirectKHR: {
|
|
android::base::beginTrace("vkCmdBuildAccelerationStructuresIndirectKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t infoCount;
|
|
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos;
|
|
const VkDeviceAddress* pIndirectDeviceAddresses;
|
|
const uint32_t* pIndirectStrides;
|
|
const uint32_t* const* ppMaxPrimitiveCounts;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&infoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pInfos,
|
|
((infoCount)) * sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i) {
|
|
reservedunmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
vkReadStream->alloc((void**)&pIndirectDeviceAddresses,
|
|
((infoCount)) * sizeof(const VkDeviceAddress));
|
|
memcpy((VkDeviceAddress*)pIndirectDeviceAddresses, *readStreamPtrPtr,
|
|
((infoCount)) * sizeof(const VkDeviceAddress));
|
|
*readStreamPtrPtr += ((infoCount)) * sizeof(const VkDeviceAddress);
|
|
vkReadStream->alloc((void**)&pIndirectStrides,
|
|
((infoCount)) * sizeof(const uint32_t));
|
|
memcpy((uint32_t*)pIndirectStrides, *readStreamPtrPtr,
|
|
((infoCount)) * sizeof(const uint32_t));
|
|
*readStreamPtrPtr += ((infoCount)) * sizeof(const uint32_t);
|
|
if (pInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i) {
|
|
transform_tohost_VkAccelerationStructureBuildGeometryInfoKHR(
|
|
m_state, (VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i));
|
|
}
|
|
}
|
|
(void)ppMaxPrimitiveCounts;
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdBuildAccelerationStructuresIndirectKHR 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)infoCount, (unsigned long long)pInfos,
|
|
(unsigned long long)pIndirectDeviceAddresses,
|
|
(unsigned long long)pIndirectStrides,
|
|
(unsigned long long)ppMaxPrimitiveCounts);
|
|
}
|
|
vk->vkCmdBuildAccelerationStructuresIndirectKHR(
|
|
unboxed_commandBuffer, infoCount, pInfos, pIndirectDeviceAddresses,
|
|
pIndirectStrides, ppMaxPrimitiveCounts);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdBuildAccelerationStructuresIndirectKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, infoCount,
|
|
pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkBuildAccelerationStructuresKHR: {
|
|
android::base::beginTrace("vkBuildAccelerationStructuresKHR decode");
|
|
VkDevice device;
|
|
VkDeferredOperationKHR deferredOperation;
|
|
uint32_t infoCount;
|
|
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos;
|
|
const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkDeferredOperationKHR*)&deferredOperation, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&deferredOperation);
|
|
*readStreamPtrPtr += 8;
|
|
memcpy((uint32_t*)&infoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pInfos,
|
|
((infoCount)) * sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i) {
|
|
reservedunmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i),
|
|
readStreamPtrPtr);
|
|
}
|
|
if (pInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i) {
|
|
transform_tohost_VkAccelerationStructureBuildGeometryInfoKHR(
|
|
m_state, (VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i));
|
|
}
|
|
}
|
|
(void)ppBuildRangeInfos;
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkBuildAccelerationStructuresKHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)deferredOperation, (unsigned long long)infoCount,
|
|
(unsigned long long)pInfos, (unsigned long long)ppBuildRangeInfos);
|
|
}
|
|
VkResult vkBuildAccelerationStructuresKHR_VkResult_return = (VkResult)0;
|
|
vkBuildAccelerationStructuresKHR_VkResult_return =
|
|
vk->vkBuildAccelerationStructuresKHR(unboxed_device, deferredOperation,
|
|
infoCount, pInfos, ppBuildRangeInfos);
|
|
if ((vkBuildAccelerationStructuresKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkBuildAccelerationStructuresKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkBuildAccelerationStructuresKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkBuildAccelerationStructuresKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkBuildAccelerationStructuresKHR_VkResult_return, device, deferredOperation,
|
|
infoCount, pInfos, ppBuildRangeInfos);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCopyAccelerationStructureKHR: {
|
|
android::base::beginTrace("vkCopyAccelerationStructureKHR decode");
|
|
VkDevice device;
|
|
VkDeferredOperationKHR deferredOperation;
|
|
const VkCopyAccelerationStructureInfoKHR* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkDeferredOperationKHR*)&deferredOperation, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&deferredOperation);
|
|
*readStreamPtrPtr += 8;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkCopyAccelerationStructureInfoKHR));
|
|
reservedunmarshal_VkCopyAccelerationStructureInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyAccelerationStructureInfoKHR*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkCopyAccelerationStructureInfoKHR(
|
|
m_state, (VkCopyAccelerationStructureInfoKHR*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCopyAccelerationStructureKHR 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)deferredOperation,
|
|
(unsigned long long)pInfo);
|
|
}
|
|
VkResult vkCopyAccelerationStructureKHR_VkResult_return = (VkResult)0;
|
|
vkCopyAccelerationStructureKHR_VkResult_return =
|
|
vk->vkCopyAccelerationStructureKHR(unboxed_device, deferredOperation, pInfo);
|
|
if ((vkCopyAccelerationStructureKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCopyAccelerationStructureKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkCopyAccelerationStructureKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCopyAccelerationStructureKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCopyAccelerationStructureKHR_VkResult_return, device, deferredOperation,
|
|
pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCopyAccelerationStructureToMemoryKHR: {
|
|
android::base::beginTrace("vkCopyAccelerationStructureToMemoryKHR decode");
|
|
VkDevice device;
|
|
VkDeferredOperationKHR deferredOperation;
|
|
const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkDeferredOperationKHR*)&deferredOperation, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&deferredOperation);
|
|
*readStreamPtrPtr += 8;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkCopyAccelerationStructureToMemoryInfoKHR));
|
|
reservedunmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyAccelerationStructureToMemoryInfoKHR*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkCopyAccelerationStructureToMemoryInfoKHR(
|
|
m_state, (VkCopyAccelerationStructureToMemoryInfoKHR*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCopyAccelerationStructureToMemoryKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)deferredOperation, (unsigned long long)pInfo);
|
|
}
|
|
VkResult vkCopyAccelerationStructureToMemoryKHR_VkResult_return = (VkResult)0;
|
|
vkCopyAccelerationStructureToMemoryKHR_VkResult_return =
|
|
vk->vkCopyAccelerationStructureToMemoryKHR(unboxed_device, deferredOperation,
|
|
pInfo);
|
|
if ((vkCopyAccelerationStructureToMemoryKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCopyAccelerationStructureToMemoryKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkCopyAccelerationStructureToMemoryKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCopyAccelerationStructureToMemoryKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCopyAccelerationStructureToMemoryKHR_VkResult_return, device,
|
|
deferredOperation, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCopyMemoryToAccelerationStructureKHR: {
|
|
android::base::beginTrace("vkCopyMemoryToAccelerationStructureKHR decode");
|
|
VkDevice device;
|
|
VkDeferredOperationKHR deferredOperation;
|
|
const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkDeferredOperationKHR*)&deferredOperation, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&deferredOperation);
|
|
*readStreamPtrPtr += 8;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkCopyMemoryToAccelerationStructureInfoKHR));
|
|
reservedunmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyMemoryToAccelerationStructureInfoKHR*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkCopyMemoryToAccelerationStructureInfoKHR(
|
|
m_state, (VkCopyMemoryToAccelerationStructureInfoKHR*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCopyMemoryToAccelerationStructureKHR 0x%llx 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)deferredOperation, (unsigned long long)pInfo);
|
|
}
|
|
VkResult vkCopyMemoryToAccelerationStructureKHR_VkResult_return = (VkResult)0;
|
|
vkCopyMemoryToAccelerationStructureKHR_VkResult_return =
|
|
vk->vkCopyMemoryToAccelerationStructureKHR(unboxed_device, deferredOperation,
|
|
pInfo);
|
|
if ((vkCopyMemoryToAccelerationStructureKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCopyMemoryToAccelerationStructureKHR_VkResult_return,
|
|
opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkCopyMemoryToAccelerationStructureKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCopyMemoryToAccelerationStructureKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCopyMemoryToAccelerationStructureKHR_VkResult_return, device,
|
|
deferredOperation, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkWriteAccelerationStructuresPropertiesKHR: {
|
|
android::base::beginTrace("vkWriteAccelerationStructuresPropertiesKHR decode");
|
|
VkDevice device;
|
|
uint32_t accelerationStructureCount;
|
|
const VkAccelerationStructureKHR* pAccelerationStructures;
|
|
VkQueryType queryType;
|
|
size_t dataSize;
|
|
void* pData;
|
|
size_t stride;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((uint32_t*)&accelerationStructureCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pAccelerationStructures,
|
|
((accelerationStructureCount)) * sizeof(const VkAccelerationStructureKHR));
|
|
if (((accelerationStructureCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((accelerationStructureCount));
|
|
for (uint32_t k = 0; k < ((accelerationStructureCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkAccelerationStructureKHR*)pAccelerationStructures) + k) =
|
|
(VkAccelerationStructureKHR)unbox_VkAccelerationStructureKHR(
|
|
(VkAccelerationStructureKHR)tmpval);
|
|
}
|
|
}
|
|
memcpy((VkQueryType*)&queryType, *readStreamPtrPtr, sizeof(VkQueryType));
|
|
*readStreamPtrPtr += sizeof(VkQueryType);
|
|
memcpy((size_t*)&dataSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&dataSize);
|
|
*readStreamPtrPtr += 8;
|
|
// Begin manual dispatchable handle unboxing for pData;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pData, ((dataSize)) * sizeof(uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, ((dataSize)) * sizeof(uint8_t));
|
|
*readStreamPtrPtr += ((dataSize)) * sizeof(uint8_t);
|
|
memcpy((size_t*)&stride, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&stride);
|
|
*readStreamPtrPtr += 8;
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkWriteAccelerationStructuresPropertiesKHR 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)accelerationStructureCount,
|
|
(unsigned long long)pAccelerationStructures,
|
|
(unsigned long long)queryType, (unsigned long long)dataSize,
|
|
(unsigned long long)pData, (unsigned long long)stride);
|
|
}
|
|
VkResult vkWriteAccelerationStructuresPropertiesKHR_VkResult_return = (VkResult)0;
|
|
vkWriteAccelerationStructuresPropertiesKHR_VkResult_return =
|
|
vk->vkWriteAccelerationStructuresPropertiesKHR(
|
|
unboxed_device, accelerationStructureCount, pAccelerationStructures,
|
|
queryType, dataSize, pData, stride);
|
|
if ((vkWriteAccelerationStructuresPropertiesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkWriteAccelerationStructuresPropertiesKHR_VkResult_return, opcode, context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void*)pData, ((dataSize)) * sizeof(uint8_t));
|
|
vkStream->write(&vkWriteAccelerationStructuresPropertiesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkWriteAccelerationStructuresPropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkWriteAccelerationStructuresPropertiesKHR_VkResult_return, device,
|
|
accelerationStructureCount, pAccelerationStructures, queryType, dataSize,
|
|
pData, stride);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyAccelerationStructureKHR: {
|
|
android::base::beginTrace("vkCmdCopyAccelerationStructureKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCopyAccelerationStructureInfoKHR* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkCopyAccelerationStructureInfoKHR));
|
|
reservedunmarshal_VkCopyAccelerationStructureInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyAccelerationStructureInfoKHR*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkCopyAccelerationStructureInfoKHR(
|
|
m_state, (VkCopyAccelerationStructureInfoKHR*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdCopyAccelerationStructureKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)pInfo);
|
|
}
|
|
vk->vkCmdCopyAccelerationStructureKHR(unboxed_commandBuffer, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyAccelerationStructureKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyAccelerationStructureToMemoryKHR: {
|
|
android::base::beginTrace("vkCmdCopyAccelerationStructureToMemoryKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkCopyAccelerationStructureToMemoryInfoKHR));
|
|
reservedunmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyAccelerationStructureToMemoryInfoKHR*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkCopyAccelerationStructureToMemoryInfoKHR(
|
|
m_state, (VkCopyAccelerationStructureToMemoryInfoKHR*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdCopyAccelerationStructureToMemoryKHR 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)pInfo);
|
|
}
|
|
vk->vkCmdCopyAccelerationStructureToMemoryKHR(unboxed_commandBuffer, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyAccelerationStructureToMemoryKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdCopyMemoryToAccelerationStructureKHR: {
|
|
android::base::beginTrace("vkCmdCopyMemoryToAccelerationStructureKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkCopyMemoryToAccelerationStructureInfoKHR));
|
|
reservedunmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkCopyMemoryToAccelerationStructureInfoKHR*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkCopyMemoryToAccelerationStructureInfoKHR(
|
|
m_state, (VkCopyMemoryToAccelerationStructureInfoKHR*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdCopyMemoryToAccelerationStructureKHR 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer, (unsigned long long)pInfo);
|
|
}
|
|
vk->vkCmdCopyMemoryToAccelerationStructureKHR(unboxed_commandBuffer, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdCopyMemoryToAccelerationStructureKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetAccelerationStructureDeviceAddressKHR: {
|
|
android::base::beginTrace("vkGetAccelerationStructureDeviceAddressKHR decode");
|
|
VkDevice device;
|
|
const VkAccelerationStructureDeviceAddressInfoKHR* pInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pInfo,
|
|
sizeof(const VkAccelerationStructureDeviceAddressInfoKHR));
|
|
reservedunmarshal_VkAccelerationStructureDeviceAddressInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureDeviceAddressInfoKHR*)(pInfo), readStreamPtrPtr);
|
|
if (pInfo) {
|
|
transform_tohost_VkAccelerationStructureDeviceAddressInfoKHR(
|
|
m_state, (VkAccelerationStructureDeviceAddressInfoKHR*)(pInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetAccelerationStructureDeviceAddressKHR 0x%llx "
|
|
"0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pInfo);
|
|
}
|
|
VkDeviceAddress vkGetAccelerationStructureDeviceAddressKHR_VkDeviceAddress_return =
|
|
(VkDeviceAddress)0;
|
|
vkGetAccelerationStructureDeviceAddressKHR_VkDeviceAddress_return =
|
|
vk->vkGetAccelerationStructureDeviceAddressKHR(unboxed_device, pInfo);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetAccelerationStructureDeviceAddressKHR_VkDeviceAddress_return,
|
|
sizeof(VkDeviceAddress));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetAccelerationStructureDeviceAddressKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetAccelerationStructureDeviceAddressKHR_VkDeviceAddress_return, device,
|
|
pInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdWriteAccelerationStructuresPropertiesKHR: {
|
|
android::base::beginTrace("vkCmdWriteAccelerationStructuresPropertiesKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t accelerationStructureCount;
|
|
const VkAccelerationStructureKHR* pAccelerationStructures;
|
|
VkQueryType queryType;
|
|
VkQueryPool queryPool;
|
|
uint32_t firstQuery;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&accelerationStructureCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pAccelerationStructures,
|
|
((accelerationStructureCount)) * sizeof(const VkAccelerationStructureKHR));
|
|
if (((accelerationStructureCount))) {
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((accelerationStructureCount));
|
|
for (uint32_t k = 0; k < ((accelerationStructureCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_1_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkAccelerationStructureKHR*)pAccelerationStructures) + k) =
|
|
(VkAccelerationStructureKHR)unbox_VkAccelerationStructureKHR(
|
|
(VkAccelerationStructureKHR)tmpval);
|
|
}
|
|
}
|
|
memcpy((VkQueryType*)&queryType, *readStreamPtrPtr, sizeof(VkQueryType));
|
|
*readStreamPtrPtr += sizeof(VkQueryType);
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkQueryPool*)&queryPool =
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_2));
|
|
memcpy((uint32_t*)&firstQuery, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdWriteAccelerationStructuresPropertiesKHR 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)accelerationStructureCount,
|
|
(unsigned long long)pAccelerationStructures,
|
|
(unsigned long long)queryType, (unsigned long long)queryPool,
|
|
(unsigned long long)firstQuery);
|
|
}
|
|
vk->vkCmdWriteAccelerationStructuresPropertiesKHR(
|
|
unboxed_commandBuffer, accelerationStructureCount, pAccelerationStructures,
|
|
queryType, queryPool, firstQuery);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdWriteAccelerationStructuresPropertiesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
accelerationStructureCount, pAccelerationStructures, queryType, queryPool,
|
|
firstQuery);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetDeviceAccelerationStructureCompatibilityKHR: {
|
|
android::base::beginTrace(
|
|
"vkGetDeviceAccelerationStructureCompatibilityKHR decode");
|
|
VkDevice device;
|
|
const VkAccelerationStructureVersionInfoKHR* pVersionInfo;
|
|
VkAccelerationStructureCompatibilityKHR* pCompatibility;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
vkReadStream->alloc((void**)&pVersionInfo,
|
|
sizeof(const VkAccelerationStructureVersionInfoKHR));
|
|
reservedunmarshal_VkAccelerationStructureVersionInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureVersionInfoKHR*)(pVersionInfo), readStreamPtrPtr);
|
|
// Begin manual dispatchable handle unboxing for pCompatibility;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pCompatibility,
|
|
sizeof(VkAccelerationStructureCompatibilityKHR));
|
|
memcpy((VkAccelerationStructureCompatibilityKHR*)pCompatibility, *readStreamPtrPtr,
|
|
sizeof(VkAccelerationStructureCompatibilityKHR));
|
|
*readStreamPtrPtr += sizeof(VkAccelerationStructureCompatibilityKHR);
|
|
if (pVersionInfo) {
|
|
transform_tohost_VkAccelerationStructureVersionInfoKHR(
|
|
m_state, (VkAccelerationStructureVersionInfoKHR*)(pVersionInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetDeviceAccelerationStructureCompatibilityKHR "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pVersionInfo,
|
|
(unsigned long long)pCompatibility);
|
|
}
|
|
vk->vkGetDeviceAccelerationStructureCompatibilityKHR(unboxed_device, pVersionInfo,
|
|
pCompatibility);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((VkAccelerationStructureCompatibilityKHR*)pCompatibility,
|
|
sizeof(VkAccelerationStructureCompatibilityKHR));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetDeviceAccelerationStructureCompatibilityKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pVersionInfo,
|
|
pCompatibility);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetAccelerationStructureBuildSizesKHR: {
|
|
android::base::beginTrace("vkGetAccelerationStructureBuildSizesKHR decode");
|
|
VkDevice device;
|
|
VkAccelerationStructureBuildTypeKHR buildType;
|
|
const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo;
|
|
const uint32_t* pMaxPrimitiveCounts;
|
|
VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkAccelerationStructureBuildTypeKHR*)&buildType, *readStreamPtrPtr,
|
|
sizeof(VkAccelerationStructureBuildTypeKHR));
|
|
*readStreamPtrPtr += sizeof(VkAccelerationStructureBuildTypeKHR);
|
|
vkReadStream->alloc((void**)&pBuildInfo,
|
|
sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
|
|
reservedunmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureBuildGeometryInfoKHR*)(pBuildInfo), readStreamPtrPtr);
|
|
// WARNING PTR CHECK
|
|
memcpy((uint32_t**)&pMaxPrimitiveCounts, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pMaxPrimitiveCounts);
|
|
*readStreamPtrPtr += 8;
|
|
if (pMaxPrimitiveCounts) {
|
|
vkReadStream->alloc((void**)&pMaxPrimitiveCounts,
|
|
pBuildInfo->geometryCount * sizeof(const uint32_t));
|
|
memcpy((uint32_t*)pMaxPrimitiveCounts, *readStreamPtrPtr,
|
|
pBuildInfo->geometryCount * sizeof(const uint32_t));
|
|
*readStreamPtrPtr += pBuildInfo->geometryCount * sizeof(const uint32_t);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pSizeInfo;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pSizeInfo,
|
|
sizeof(VkAccelerationStructureBuildSizesInfoKHR));
|
|
reservedunmarshal_VkAccelerationStructureBuildSizesInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo), readStreamPtrPtr);
|
|
if (pBuildInfo) {
|
|
transform_tohost_VkAccelerationStructureBuildGeometryInfoKHR(
|
|
m_state, (VkAccelerationStructureBuildGeometryInfoKHR*)(pBuildInfo));
|
|
}
|
|
if (pSizeInfo) {
|
|
transform_tohost_VkAccelerationStructureBuildSizesInfoKHR(
|
|
m_state, (VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetAccelerationStructureBuildSizesKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)buildType,
|
|
(unsigned long long)pBuildInfo, (unsigned long long)pMaxPrimitiveCounts,
|
|
(unsigned long long)pSizeInfo);
|
|
}
|
|
vk->vkGetAccelerationStructureBuildSizesKHR(unboxed_device, buildType, pBuildInfo,
|
|
pMaxPrimitiveCounts, pSizeInfo);
|
|
vkStream->unsetHandleMapping();
|
|
if (pSizeInfo) {
|
|
transform_fromhost_VkAccelerationStructureBuildSizesInfoKHR(
|
|
m_state, (VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo));
|
|
}
|
|
marshal_VkAccelerationStructureBuildSizesInfoKHR(
|
|
vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetAccelerationStructureBuildSizesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, buildType,
|
|
pBuildInfo, pMaxPrimitiveCounts, pSizeInfo);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_ray_tracing_pipeline
|
|
case OP_vkCmdTraceRaysKHR: {
|
|
android::base::beginTrace("vkCmdTraceRaysKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable;
|
|
const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable;
|
|
const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable;
|
|
const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable;
|
|
uint32_t width;
|
|
uint32_t height;
|
|
uint32_t depth;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pRaygenShaderBindingTable,
|
|
sizeof(const VkStridedDeviceAddressRegionKHR));
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable),
|
|
readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pMissShaderBindingTable,
|
|
sizeof(const VkStridedDeviceAddressRegionKHR));
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable), readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pHitShaderBindingTable,
|
|
sizeof(const VkStridedDeviceAddressRegionKHR));
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable), readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pCallableShaderBindingTable,
|
|
sizeof(const VkStridedDeviceAddressRegionKHR));
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable),
|
|
readStreamPtrPtr);
|
|
memcpy((uint32_t*)&width, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&height, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&depth, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (pRaygenShaderBindingTable) {
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
|
m_state, (VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable));
|
|
}
|
|
if (pMissShaderBindingTable) {
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
|
m_state, (VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable));
|
|
}
|
|
if (pHitShaderBindingTable) {
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
|
m_state, (VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable));
|
|
}
|
|
if (pCallableShaderBindingTable) {
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
|
m_state, (VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdTraceRaysKHR 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pRaygenShaderBindingTable,
|
|
(unsigned long long)pMissShaderBindingTable,
|
|
(unsigned long long)pHitShaderBindingTable,
|
|
(unsigned long long)pCallableShaderBindingTable,
|
|
(unsigned long long)width, (unsigned long long)height,
|
|
(unsigned long long)depth);
|
|
}
|
|
vk->vkCmdTraceRaysKHR(unboxed_commandBuffer, pRaygenShaderBindingTable,
|
|
pMissShaderBindingTable, pHitShaderBindingTable,
|
|
pCallableShaderBindingTable, width, height, depth);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdTraceRaysKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable,
|
|
pCallableShaderBindingTable, width, height, depth);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCreateRayTracingPipelinesKHR: {
|
|
android::base::beginTrace("vkCreateRayTracingPipelinesKHR decode");
|
|
VkDevice device;
|
|
VkDeferredOperationKHR deferredOperation;
|
|
VkPipelineCache pipelineCache;
|
|
uint32_t createInfoCount;
|
|
const VkRayTracingPipelineCreateInfoKHR* pCreateInfos;
|
|
const VkAllocationCallbacks* pAllocator;
|
|
VkPipeline* pPipelines;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
memcpy((VkDeferredOperationKHR*)&deferredOperation, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&deferredOperation);
|
|
*readStreamPtrPtr += 8;
|
|
uint64_t cgen_var_2;
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipelineCache*)&pipelineCache =
|
|
(VkPipelineCache)unbox_VkPipelineCache((VkPipelineCache)(*&cgen_var_2));
|
|
memcpy((uint32_t*)&createInfoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
vkReadStream->alloc(
|
|
(void**)&pCreateInfos,
|
|
((createInfoCount)) * sizeof(const VkRayTracingPipelineCreateInfoKHR));
|
|
for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
|
|
reservedunmarshal_VkRayTracingPipelineCreateInfoKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkRayTracingPipelineCreateInfoKHR*)(pCreateInfos + i), readStreamPtrPtr);
|
|
}
|
|
// WARNING PTR CHECK
|
|
memcpy((VkAllocationCallbacks**)&pAllocator, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&pAllocator);
|
|
*readStreamPtrPtr += 8;
|
|
if (pAllocator) {
|
|
vkReadStream->alloc((void**)&pAllocator, sizeof(const VkAllocationCallbacks));
|
|
reservedunmarshal_VkAllocationCallbacks(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkAllocationCallbacks*)(pAllocator), readStreamPtrPtr);
|
|
}
|
|
// Begin manual dispatchable handle unboxing for pPipelines;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pPipelines, ((createInfoCount)) * sizeof(VkPipeline));
|
|
if (((createInfoCount))) {
|
|
uint8_t* cgen_var_4_ptr = (uint8_t*)(*readStreamPtrPtr);
|
|
*readStreamPtrPtr += 8 * ((createInfoCount));
|
|
for (uint32_t k = 0; k < ((createInfoCount)); ++k) {
|
|
uint64_t tmpval;
|
|
memcpy(&tmpval, cgen_var_4_ptr + k * 8, sizeof(uint64_t));
|
|
*(((VkPipeline*)pPipelines) + k) =
|
|
(VkPipeline)(VkPipeline)((VkPipeline)tmpval);
|
|
}
|
|
}
|
|
if (pCreateInfos) {
|
|
for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
|
|
transform_tohost_VkRayTracingPipelineCreateInfoKHR(
|
|
m_state, (VkRayTracingPipelineCreateInfoKHR*)(pCreateInfos + i));
|
|
}
|
|
}
|
|
if (pAllocator) {
|
|
transform_tohost_VkAllocationCallbacks(m_state,
|
|
(VkAllocationCallbacks*)(pAllocator));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCreateRayTracingPipelinesKHR 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device,
|
|
(unsigned long long)deferredOperation,
|
|
(unsigned long long)pipelineCache, (unsigned long long)createInfoCount,
|
|
(unsigned long long)pCreateInfos, (unsigned long long)pAllocator,
|
|
(unsigned long long)pPipelines);
|
|
}
|
|
VkResult vkCreateRayTracingPipelinesKHR_VkResult_return = (VkResult)0;
|
|
vkCreateRayTracingPipelinesKHR_VkResult_return = vk->vkCreateRayTracingPipelinesKHR(
|
|
unboxed_device, deferredOperation, pipelineCache, createInfoCount, pCreateInfos,
|
|
pAllocator, pPipelines);
|
|
if ((vkCreateRayTracingPipelinesKHR_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(vkCreateRayTracingPipelinesKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
if (((createInfoCount))) {
|
|
uint64_t* cgen_var_5;
|
|
vkStream->alloc((void**)&cgen_var_5, ((createInfoCount)) * 8);
|
|
vkStream->handleMapping()->mapHandles_VkPipeline_u64(pPipelines, cgen_var_5,
|
|
((createInfoCount)));
|
|
vkStream->write((uint64_t*)cgen_var_5, ((createInfoCount)) * 8);
|
|
}
|
|
vkStream->write(&vkCreateRayTracingPipelinesKHR_VkResult_return, sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCreateRayTracingPipelinesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkCreateRayTracingPipelinesKHR_VkResult_return, device, deferredOperation,
|
|
pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR: {
|
|
android::base::beginTrace(
|
|
"vkGetRayTracingCaptureReplayShaderGroupHandlesKHR decode");
|
|
VkDevice device;
|
|
VkPipeline pipeline;
|
|
uint32_t firstGroup;
|
|
uint32_t groupCount;
|
|
size_t dataSize;
|
|
void* pData;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&firstGroup, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((uint32_t*)&groupCount, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((size_t*)&dataSize, (*readStreamPtrPtr), 8);
|
|
android::base::Stream::fromBe64((uint8_t*)&dataSize);
|
|
*readStreamPtrPtr += 8;
|
|
// Begin manual dispatchable handle unboxing for pData;
|
|
vkReadStream->unsetHandleMapping();
|
|
vkReadStream->alloc((void**)&pData, ((dataSize)) * sizeof(uint8_t));
|
|
memcpy((void*)pData, *readStreamPtrPtr, ((dataSize)) * sizeof(uint8_t));
|
|
*readStreamPtrPtr += ((dataSize)) * sizeof(uint8_t);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetRayTracingCaptureReplayShaderGroupHandlesKHR "
|
|
"0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipeline,
|
|
(unsigned long long)firstGroup, (unsigned long long)groupCount,
|
|
(unsigned long long)dataSize, (unsigned long long)pData);
|
|
}
|
|
VkResult vkGetRayTracingCaptureReplayShaderGroupHandlesKHR_VkResult_return =
|
|
(VkResult)0;
|
|
vkGetRayTracingCaptureReplayShaderGroupHandlesKHR_VkResult_return =
|
|
vk->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR(
|
|
unboxed_device, pipeline, firstGroup, groupCount, dataSize, pData);
|
|
if ((vkGetRayTracingCaptureReplayShaderGroupHandlesKHR_VkResult_return) ==
|
|
VK_ERROR_DEVICE_LOST)
|
|
m_state->on_DeviceLost();
|
|
m_state->on_CheckOutOfMemory(
|
|
vkGetRayTracingCaptureReplayShaderGroupHandlesKHR_VkResult_return, opcode,
|
|
context);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write((void*)pData, ((dataSize)) * sizeof(uint8_t));
|
|
vkStream->write(&vkGetRayTracingCaptureReplayShaderGroupHandlesKHR_VkResult_return,
|
|
sizeof(VkResult));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetRayTracingCaptureReplayShaderGroupHandlesKHR_VkResult_return, device,
|
|
pipeline, firstGroup, groupCount, dataSize, pData);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdTraceRaysIndirectKHR: {
|
|
android::base::beginTrace("vkCmdTraceRaysIndirectKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable;
|
|
const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable;
|
|
const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable;
|
|
const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable;
|
|
VkDeviceAddress indirectDeviceAddress;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
vkReadStream->alloc((void**)&pRaygenShaderBindingTable,
|
|
sizeof(const VkStridedDeviceAddressRegionKHR));
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable),
|
|
readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pMissShaderBindingTable,
|
|
sizeof(const VkStridedDeviceAddressRegionKHR));
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable), readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pHitShaderBindingTable,
|
|
sizeof(const VkStridedDeviceAddressRegionKHR));
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable), readStreamPtrPtr);
|
|
vkReadStream->alloc((void**)&pCallableShaderBindingTable,
|
|
sizeof(const VkStridedDeviceAddressRegionKHR));
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
|
vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
|
(VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable),
|
|
readStreamPtrPtr);
|
|
memcpy((VkDeviceAddress*)&indirectDeviceAddress, *readStreamPtrPtr,
|
|
sizeof(VkDeviceAddress));
|
|
*readStreamPtrPtr += sizeof(VkDeviceAddress);
|
|
if (pRaygenShaderBindingTable) {
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
|
m_state, (VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable));
|
|
}
|
|
if (pMissShaderBindingTable) {
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
|
m_state, (VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable));
|
|
}
|
|
if (pHitShaderBindingTable) {
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
|
m_state, (VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable));
|
|
}
|
|
if (pCallableShaderBindingTable) {
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
|
m_state, (VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable));
|
|
}
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkCmdTraceRaysIndirectKHR 0x%llx 0x%llx 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pRaygenShaderBindingTable,
|
|
(unsigned long long)pMissShaderBindingTable,
|
|
(unsigned long long)pHitShaderBindingTable,
|
|
(unsigned long long)pCallableShaderBindingTable,
|
|
(unsigned long long)indirectDeviceAddress);
|
|
}
|
|
vk->vkCmdTraceRaysIndirectKHR(unboxed_commandBuffer, pRaygenShaderBindingTable,
|
|
pMissShaderBindingTable, pHitShaderBindingTable,
|
|
pCallableShaderBindingTable, indirectDeviceAddress);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdTraceRaysIndirectKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable,
|
|
pCallableShaderBindingTable, indirectDeviceAddress);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkGetRayTracingShaderGroupStackSizeKHR: {
|
|
android::base::beginTrace("vkGetRayTracingShaderGroupStackSizeKHR decode");
|
|
VkDevice device;
|
|
VkPipeline pipeline;
|
|
uint32_t group;
|
|
VkShaderGroupShaderKHR groupShader;
|
|
// Begin non wrapped dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
|
|
auto unboxed_device = unbox_VkDevice(device);
|
|
auto vk = dispatch_VkDevice(device);
|
|
// End manual dispatchable handle unboxing for device;
|
|
uint64_t cgen_var_1;
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_1));
|
|
memcpy((uint32_t*)&group, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
memcpy((VkShaderGroupShaderKHR*)&groupShader, *readStreamPtrPtr,
|
|
sizeof(VkShaderGroupShaderKHR));
|
|
*readStreamPtrPtr += sizeof(VkShaderGroupShaderKHR);
|
|
if (m_logCalls) {
|
|
fprintf(stderr,
|
|
"stream %p: call vkGetRayTracingShaderGroupStackSizeKHR 0x%llx 0x%llx "
|
|
"0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)device, (unsigned long long)pipeline,
|
|
(unsigned long long)group, (unsigned long long)groupShader);
|
|
}
|
|
VkDeviceSize vkGetRayTracingShaderGroupStackSizeKHR_VkDeviceSize_return =
|
|
(VkDeviceSize)0;
|
|
vkGetRayTracingShaderGroupStackSizeKHR_VkDeviceSize_return =
|
|
vk->vkGetRayTracingShaderGroupStackSizeKHR(unboxed_device, pipeline, group,
|
|
groupShader);
|
|
vkStream->unsetHandleMapping();
|
|
vkStream->write(&vkGetRayTracingShaderGroupStackSizeKHR_VkDeviceSize_return,
|
|
sizeof(VkDeviceSize));
|
|
vkStream->commitWrite();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkGetRayTracingShaderGroupStackSizeKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool,
|
|
vkGetRayTracingShaderGroupStackSizeKHR_VkDeviceSize_return, device,
|
|
pipeline, group, groupShader);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
case OP_vkCmdSetRayTracingPipelineStackSizeKHR: {
|
|
android::base::beginTrace("vkCmdSetRayTracingPipelineStackSizeKHR decode");
|
|
VkCommandBuffer commandBuffer;
|
|
uint32_t pipelineStackSize;
|
|
// Begin non wrapped dispatchable handle unboxing for commandBuffer;
|
|
uint64_t cgen_var_0;
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
|
*readStreamPtrPtr += 1 * 8;
|
|
*(VkCommandBuffer*)&commandBuffer =
|
|
(VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
|
|
auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
|
|
auto vk = dispatch_VkCommandBuffer(commandBuffer);
|
|
// End manual dispatchable handle unboxing for commandBuffer;
|
|
memcpy((uint32_t*)&pipelineStackSize, *readStreamPtrPtr, sizeof(uint32_t));
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
|
if (m_logCalls) {
|
|
fprintf(
|
|
stderr,
|
|
"stream %p: call vkCmdSetRayTracingPipelineStackSizeKHR 0x%llx 0x%llx \n",
|
|
ioStream, (unsigned long long)commandBuffer,
|
|
(unsigned long long)pipelineStackSize);
|
|
}
|
|
vk->vkCmdSetRayTracingPipelineStackSizeKHR(unboxed_commandBuffer,
|
|
pipelineStackSize);
|
|
vkStream->unsetHandleMapping();
|
|
vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
|
|
(uintptr_t)snapshotTraceBegin);
|
|
size_t snapshotTraceBytes = vkReadStream->endTrace();
|
|
if (m_state->snapshotsEnabled()) {
|
|
m_state->snapshot()->vkCmdSetRayTracingPipelineStackSizeKHR(
|
|
snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer,
|
|
pipelineStackSize);
|
|
}
|
|
vkReadStream->clearPool();
|
|
if (queueSubmitWithCommandsEnabled)
|
|
seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
|
|
android::base::endTrace();
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef VK_KHR_ray_query
|
|
#endif
|
|
default: {
|
|
m_pool.freeAll();
|
|
return ptr - (unsigned char*)buf;
|
|
}
|
|
}
|
|
ptr += packetLen;
|
|
}
|
|
if (m_forSnapshotLoad) {
|
|
m_state->clearCreatedHandlesForSnapshotLoad();
|
|
}
|
|
m_pool.freeAll();
|
|
return ptr - (unsigned char*)buf;
|
|
;
|
|
}
|
|
|
|
} // namespace vk
|
|
} // namespace gfxstream
|