4606 lines
242 KiB
C++
4606 lines
242 KiB
C++
|
|
// 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 VkSubDecoder
|
||
|
|
//
|
||
|
|
// (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
|
||
|
|
//
|
||
|
|
#define MAX_STACK_ITEMS 16
|
||
|
|
#define MAX_PACKET_LENGTH (400 * 1024 * 1024) // 400MB
|
||
|
|
size_t subDecode(VulkanMemReadingStream* readStream, VulkanDispatch* vk, void* boxed_dispatchHandle,
|
||
|
|
void* dispatchHandle, VkDeviceSize dataSize, const void* pData,
|
||
|
|
const VkDecoderContext& context) {
|
||
|
|
auto& metricsLogger = *context.metricsLogger;
|
||
|
|
uint32_t count = 0;
|
||
|
|
unsigned char* buf = (unsigned char*)pData;
|
||
|
|
android::base::BumpPool* pool = readStream->pool();
|
||
|
|
unsigned char* ptr = (unsigned char*)pData;
|
||
|
|
const unsigned char* const end = (const unsigned char*)buf + dataSize;
|
||
|
|
VkDecoderGlobalState* globalstate = VkDecoderGlobalState::get();
|
||
|
|
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, subdecode may fail", packetLen);
|
||
|
|
metricsLogger.logMetricEvent(MetricEventBadPacketLength{.len = packetLen});
|
||
|
|
}
|
||
|
|
|
||
|
|
if (end - ptr < packetLen) return ptr - (unsigned char*)buf;
|
||
|
|
readStream->setBuf((uint8_t*)(ptr + 8));
|
||
|
|
uint8_t* readStreamPtr = readStream->getBuf();
|
||
|
|
uint8_t** readStreamPtrPtr = &readStreamPtr;
|
||
|
|
switch (opcode) {
|
||
|
|
#ifdef VK_VERSION_1_0
|
||
|
|
case OP_vkBeginCommandBuffer: {
|
||
|
|
android::base::beginTrace("vkBeginCommandBuffer subdecode");
|
||
|
|
const VkCommandBufferBeginInfo* pBeginInfo;
|
||
|
|
VkCommandBufferBeginInfo stack_pBeginInfo[1];
|
||
|
|
pBeginInfo = (VkCommandBufferBeginInfo*)stack_pBeginInfo;
|
||
|
|
reservedunmarshal_VkCommandBufferBeginInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCommandBufferBeginInfo*)(pBeginInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pBeginInfo) {
|
||
|
|
transform_tohost_VkCommandBufferBeginInfo(
|
||
|
|
globalstate, (VkCommandBufferBeginInfo*)(pBeginInfo));
|
||
|
|
}
|
||
|
|
VkResult vkBeginCommandBuffer_VkResult_return = (VkResult)0;
|
||
|
|
vkBeginCommandBuffer_VkResult_return = this->on_vkBeginCommandBuffer(
|
||
|
|
pool, (VkCommandBuffer)(boxed_dispatchHandle), pBeginInfo, context);
|
||
|
|
if ((vkBeginCommandBuffer_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
||
|
|
this->on_DeviceLost();
|
||
|
|
this->on_CheckOutOfMemory(vkBeginCommandBuffer_VkResult_return, opcode, context);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkEndCommandBuffer: {
|
||
|
|
android::base::beginTrace("vkEndCommandBuffer subdecode");
|
||
|
|
VkResult vkEndCommandBuffer_VkResult_return = (VkResult)0;
|
||
|
|
vkEndCommandBuffer_VkResult_return = this->on_vkEndCommandBuffer(
|
||
|
|
pool, (VkCommandBuffer)(boxed_dispatchHandle), context);
|
||
|
|
if ((vkEndCommandBuffer_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
||
|
|
this->on_DeviceLost();
|
||
|
|
this->on_CheckOutOfMemory(vkEndCommandBuffer_VkResult_return, opcode, context);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkResetCommandBuffer: {
|
||
|
|
android::base::beginTrace("vkResetCommandBuffer subdecode");
|
||
|
|
VkCommandBufferResetFlags flags;
|
||
|
|
memcpy((VkCommandBufferResetFlags*)&flags, *readStreamPtrPtr,
|
||
|
|
sizeof(VkCommandBufferResetFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkCommandBufferResetFlags);
|
||
|
|
VkResult vkResetCommandBuffer_VkResult_return = (VkResult)0;
|
||
|
|
vkResetCommandBuffer_VkResult_return = this->on_vkResetCommandBuffer(
|
||
|
|
pool, (VkCommandBuffer)(boxed_dispatchHandle), flags);
|
||
|
|
if ((vkResetCommandBuffer_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
||
|
|
this->on_DeviceLost();
|
||
|
|
this->on_CheckOutOfMemory(vkResetCommandBuffer_VkResult_return, opcode, context);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBindPipeline: {
|
||
|
|
android::base::beginTrace("vkCmdBindPipeline subdecode");
|
||
|
|
VkPipelineBindPoint pipelineBindPoint;
|
||
|
|
VkPipeline pipeline;
|
||
|
|
memcpy((VkPipelineBindPoint*)&pipelineBindPoint, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineBindPoint));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineBindPoint);
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_0));
|
||
|
|
this->on_vkCmdBindPipeline(pool, (VkCommandBuffer)(boxed_dispatchHandle),
|
||
|
|
pipelineBindPoint, pipeline);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetViewport: {
|
||
|
|
android::base::beginTrace("vkCmdSetViewport subdecode");
|
||
|
|
uint32_t firstViewport;
|
||
|
|
uint32_t viewportCount;
|
||
|
|
const VkViewport* pViewports;
|
||
|
|
VkViewport stack_pViewports[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&firstViewport, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&viewportCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((viewportCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pViewports = (VkViewport*)stack_pViewports;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pViewports,
|
||
|
|
((viewportCount)) * sizeof(const VkViewport));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
||
|
|
reservedunmarshal_VkViewport(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkViewport*)(pViewports + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pViewports) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
||
|
|
transform_tohost_VkViewport(globalstate, (VkViewport*)(pViewports + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetViewport((VkCommandBuffer)dispatchHandle, firstViewport, viewportCount,
|
||
|
|
pViewports);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetScissor: {
|
||
|
|
android::base::beginTrace("vkCmdSetScissor subdecode");
|
||
|
|
uint32_t firstScissor;
|
||
|
|
uint32_t scissorCount;
|
||
|
|
const VkRect2D* pScissors;
|
||
|
|
VkRect2D stack_pScissors[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&firstScissor, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&scissorCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((scissorCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pScissors = (VkRect2D*)stack_pScissors;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pScissors,
|
||
|
|
((scissorCount)) * sizeof(const VkRect2D));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
|
||
|
|
reservedunmarshal_VkRect2D(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkRect2D*)(pScissors + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pScissors) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
|
||
|
|
transform_tohost_VkRect2D(globalstate, (VkRect2D*)(pScissors + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetScissor((VkCommandBuffer)dispatchHandle, firstScissor, scissorCount,
|
||
|
|
pScissors);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetLineWidth: {
|
||
|
|
android::base::beginTrace("vkCmdSetLineWidth subdecode");
|
||
|
|
float lineWidth;
|
||
|
|
memcpy((float*)&lineWidth, *readStreamPtrPtr, sizeof(float));
|
||
|
|
*readStreamPtrPtr += sizeof(float);
|
||
|
|
vk->vkCmdSetLineWidth((VkCommandBuffer)dispatchHandle, lineWidth);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetDepthBias: {
|
||
|
|
android::base::beginTrace("vkCmdSetDepthBias subdecode");
|
||
|
|
float depthBiasConstantFactor;
|
||
|
|
float depthBiasClamp;
|
||
|
|
float depthBiasSlopeFactor;
|
||
|
|
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);
|
||
|
|
vk->vkCmdSetDepthBias((VkCommandBuffer)dispatchHandle, depthBiasConstantFactor,
|
||
|
|
depthBiasClamp, depthBiasSlopeFactor);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetBlendConstants: {
|
||
|
|
android::base::beginTrace("vkCmdSetBlendConstants subdecode");
|
||
|
|
float blendConstants[4];
|
||
|
|
memcpy((float*)blendConstants, *readStreamPtrPtr, 4 * sizeof(const float));
|
||
|
|
*readStreamPtrPtr += 4 * sizeof(const float);
|
||
|
|
vk->vkCmdSetBlendConstants((VkCommandBuffer)dispatchHandle, blendConstants);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetDepthBounds: {
|
||
|
|
android::base::beginTrace("vkCmdSetDepthBounds subdecode");
|
||
|
|
float minDepthBounds;
|
||
|
|
float maxDepthBounds;
|
||
|
|
memcpy((float*)&minDepthBounds, *readStreamPtrPtr, sizeof(float));
|
||
|
|
*readStreamPtrPtr += sizeof(float);
|
||
|
|
memcpy((float*)&maxDepthBounds, *readStreamPtrPtr, sizeof(float));
|
||
|
|
*readStreamPtrPtr += sizeof(float);
|
||
|
|
vk->vkCmdSetDepthBounds((VkCommandBuffer)dispatchHandle, minDepthBounds,
|
||
|
|
maxDepthBounds);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetStencilCompareMask: {
|
||
|
|
android::base::beginTrace("vkCmdSetStencilCompareMask subdecode");
|
||
|
|
VkStencilFaceFlags faceMask;
|
||
|
|
uint32_t compareMask;
|
||
|
|
memcpy((VkStencilFaceFlags*)&faceMask, *readStreamPtrPtr,
|
||
|
|
sizeof(VkStencilFaceFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkStencilFaceFlags);
|
||
|
|
memcpy((uint32_t*)&compareMask, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdSetStencilCompareMask((VkCommandBuffer)dispatchHandle, faceMask,
|
||
|
|
compareMask);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetStencilWriteMask: {
|
||
|
|
android::base::beginTrace("vkCmdSetStencilWriteMask subdecode");
|
||
|
|
VkStencilFaceFlags faceMask;
|
||
|
|
uint32_t writeMask;
|
||
|
|
memcpy((VkStencilFaceFlags*)&faceMask, *readStreamPtrPtr,
|
||
|
|
sizeof(VkStencilFaceFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkStencilFaceFlags);
|
||
|
|
memcpy((uint32_t*)&writeMask, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdSetStencilWriteMask((VkCommandBuffer)dispatchHandle, faceMask, writeMask);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetStencilReference: {
|
||
|
|
android::base::beginTrace("vkCmdSetStencilReference subdecode");
|
||
|
|
VkStencilFaceFlags faceMask;
|
||
|
|
uint32_t reference;
|
||
|
|
memcpy((VkStencilFaceFlags*)&faceMask, *readStreamPtrPtr,
|
||
|
|
sizeof(VkStencilFaceFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkStencilFaceFlags);
|
||
|
|
memcpy((uint32_t*)&reference, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdSetStencilReference((VkCommandBuffer)dispatchHandle, faceMask, reference);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBindDescriptorSets: {
|
||
|
|
android::base::beginTrace("vkCmdBindDescriptorSets subdecode");
|
||
|
|
VkPipelineBindPoint pipelineBindPoint;
|
||
|
|
VkPipelineLayout layout;
|
||
|
|
uint32_t firstSet;
|
||
|
|
uint32_t descriptorSetCount;
|
||
|
|
const VkDescriptorSet* pDescriptorSets;
|
||
|
|
VkDescriptorSet stack_pDescriptorSets[MAX_STACK_ITEMS];
|
||
|
|
uint32_t dynamicOffsetCount;
|
||
|
|
const uint32_t* pDynamicOffsets;
|
||
|
|
uint32_t stack_pDynamicOffsets[MAX_STACK_ITEMS];
|
||
|
|
memcpy((VkPipelineBindPoint*)&pipelineBindPoint, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineBindPoint));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineBindPoint);
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkPipelineLayout*)&layout =
|
||
|
|
(VkPipelineLayout)unbox_VkPipelineLayout((VkPipelineLayout)(*&cgen_var_0));
|
||
|
|
memcpy((uint32_t*)&firstSet, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&descriptorSetCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((descriptorSetCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pDescriptorSets = (VkDescriptorSet*)stack_pDescriptorSets;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pDescriptorSets,
|
||
|
|
((descriptorSetCount)) * sizeof(const VkDescriptorSet));
|
||
|
|
}
|
||
|
|
if (((descriptorSetCount))) {
|
||
|
|
uint8_t* cgen_var_1_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((descriptorSetCount));
|
||
|
|
for (uint32_t k = 0; k < ((descriptorSetCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_1_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);
|
||
|
|
if (((dynamicOffsetCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pDynamicOffsets = (uint32_t*)stack_pDynamicOffsets;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pDynamicOffsets,
|
||
|
|
((dynamicOffsetCount)) * sizeof(const uint32_t));
|
||
|
|
}
|
||
|
|
memcpy((uint32_t*)pDynamicOffsets, *readStreamPtrPtr,
|
||
|
|
((dynamicOffsetCount)) * sizeof(const uint32_t));
|
||
|
|
*readStreamPtrPtr += ((dynamicOffsetCount)) * sizeof(const uint32_t);
|
||
|
|
this->on_vkCmdBindDescriptorSets(pool, (VkCommandBuffer)(boxed_dispatchHandle),
|
||
|
|
pipelineBindPoint, layout, firstSet,
|
||
|
|
descriptorSetCount, pDescriptorSets,
|
||
|
|
dynamicOffsetCount, pDynamicOffsets);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBindIndexBuffer: {
|
||
|
|
android::base::beginTrace("vkCmdBindIndexBuffer subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
VkIndexType indexType;
|
||
|
|
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));
|
||
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
memcpy((VkIndexType*)&indexType, *readStreamPtrPtr, sizeof(VkIndexType));
|
||
|
|
*readStreamPtrPtr += sizeof(VkIndexType);
|
||
|
|
vk->vkCmdBindIndexBuffer((VkCommandBuffer)dispatchHandle, buffer, offset,
|
||
|
|
indexType);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBindVertexBuffers: {
|
||
|
|
android::base::beginTrace("vkCmdBindVertexBuffers subdecode");
|
||
|
|
uint32_t firstBinding;
|
||
|
|
uint32_t bindingCount;
|
||
|
|
const VkBuffer* pBuffers;
|
||
|
|
VkBuffer stack_pBuffers[MAX_STACK_ITEMS];
|
||
|
|
const VkDeviceSize* pOffsets;
|
||
|
|
VkDeviceSize stack_pOffsets[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&firstBinding, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&bindingCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((bindingCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pBuffers = (VkBuffer*)stack_pBuffers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pBuffers, ((bindingCount)) * sizeof(const VkBuffer));
|
||
|
|
}
|
||
|
|
if (((bindingCount))) {
|
||
|
|
uint8_t* cgen_var_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((bindingCount));
|
||
|
|
for (uint32_t k = 0; k < ((bindingCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_ptr + k * 8, sizeof(uint64_t));
|
||
|
|
*(((VkBuffer*)pBuffers) + k) = (VkBuffer)unbox_VkBuffer((VkBuffer)tmpval);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (((bindingCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pOffsets = (VkDeviceSize*)stack_pOffsets;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pOffsets,
|
||
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
||
|
|
}
|
||
|
|
memcpy((VkDeviceSize*)pOffsets, *readStreamPtrPtr,
|
||
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += ((bindingCount)) * sizeof(const VkDeviceSize);
|
||
|
|
vk->vkCmdBindVertexBuffers((VkCommandBuffer)dispatchHandle, firstBinding,
|
||
|
|
bindingCount, pBuffers, pOffsets);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDraw: {
|
||
|
|
android::base::beginTrace("vkCmdDraw subdecode");
|
||
|
|
uint32_t vertexCount;
|
||
|
|
uint32_t instanceCount;
|
||
|
|
uint32_t firstVertex;
|
||
|
|
uint32_t firstInstance;
|
||
|
|
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);
|
||
|
|
vk->vkCmdDraw((VkCommandBuffer)dispatchHandle, vertexCount, instanceCount,
|
||
|
|
firstVertex, firstInstance);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawIndexed: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndexed subdecode");
|
||
|
|
uint32_t indexCount;
|
||
|
|
uint32_t instanceCount;
|
||
|
|
uint32_t firstIndex;
|
||
|
|
int32_t vertexOffset;
|
||
|
|
uint32_t firstInstance;
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndexed((VkCommandBuffer)dispatchHandle, indexCount, instanceCount,
|
||
|
|
firstIndex, vertexOffset, firstInstance);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawIndirect: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndirect subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
uint32_t drawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndirect((VkCommandBuffer)dispatchHandle, buffer, offset, drawCount,
|
||
|
|
stride);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawIndexedIndirect: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndexedIndirect subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
uint32_t drawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndexedIndirect((VkCommandBuffer)dispatchHandle, buffer, offset,
|
||
|
|
drawCount, stride);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDispatch: {
|
||
|
|
android::base::beginTrace("vkCmdDispatch subdecode");
|
||
|
|
uint32_t groupCountX;
|
||
|
|
uint32_t groupCountY;
|
||
|
|
uint32_t groupCountZ;
|
||
|
|
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);
|
||
|
|
vk->vkCmdDispatch((VkCommandBuffer)dispatchHandle, groupCountX, groupCountY,
|
||
|
|
groupCountZ);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDispatchIndirect: {
|
||
|
|
android::base::beginTrace("vkCmdDispatchIndirect subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
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));
|
||
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
vk->vkCmdDispatchIndirect((VkCommandBuffer)dispatchHandle, buffer, offset);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyBuffer: {
|
||
|
|
android::base::beginTrace("vkCmdCopyBuffer subdecode");
|
||
|
|
VkBuffer srcBuffer;
|
||
|
|
VkBuffer dstBuffer;
|
||
|
|
uint32_t regionCount;
|
||
|
|
const VkBufferCopy* pRegions;
|
||
|
|
VkBufferCopy stack_pRegions[MAX_STACK_ITEMS];
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&srcBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
||
|
|
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((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((regionCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pRegions = (VkBufferCopy*)stack_pRegions;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pRegions,
|
||
|
|
((regionCount)) * sizeof(const VkBufferCopy));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
reservedunmarshal_VkBufferCopy(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkBufferCopy*)(pRegions + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pRegions) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
transform_tohost_VkBufferCopy(globalstate, (VkBufferCopy*)(pRegions + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdCopyBuffer((VkCommandBuffer)dispatchHandle, srcBuffer, dstBuffer,
|
||
|
|
regionCount, pRegions);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyImage: {
|
||
|
|
android::base::beginTrace("vkCmdCopyImage subdecode");
|
||
|
|
VkImage srcImage;
|
||
|
|
VkImageLayout srcImageLayout;
|
||
|
|
VkImage dstImage;
|
||
|
|
VkImageLayout dstImageLayout;
|
||
|
|
uint32_t regionCount;
|
||
|
|
const VkImageCopy* pRegions;
|
||
|
|
VkImageCopy stack_pRegions[MAX_STACK_ITEMS];
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImage*)&srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
|
||
|
|
memcpy((VkImageLayout*)&srcImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImage*)&dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
||
|
|
memcpy((VkImageLayout*)&dstImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((regionCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pRegions = (VkImageCopy*)stack_pRegions;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pRegions,
|
||
|
|
((regionCount)) * sizeof(const VkImageCopy));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
reservedunmarshal_VkImageCopy(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkImageCopy*)(pRegions + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pRegions) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
transform_tohost_VkImageCopy(globalstate, (VkImageCopy*)(pRegions + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
this->on_vkCmdCopyImage(pool, (VkCommandBuffer)(boxed_dispatchHandle), srcImage,
|
||
|
|
srcImageLayout, dstImage, dstImageLayout, regionCount,
|
||
|
|
pRegions);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBlitImage: {
|
||
|
|
android::base::beginTrace("vkCmdBlitImage subdecode");
|
||
|
|
VkImage srcImage;
|
||
|
|
VkImageLayout srcImageLayout;
|
||
|
|
VkImage dstImage;
|
||
|
|
VkImageLayout dstImageLayout;
|
||
|
|
uint32_t regionCount;
|
||
|
|
const VkImageBlit* pRegions;
|
||
|
|
VkImageBlit stack_pRegions[MAX_STACK_ITEMS];
|
||
|
|
VkFilter filter;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImage*)&srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
|
||
|
|
memcpy((VkImageLayout*)&srcImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImage*)&dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
||
|
|
memcpy((VkImageLayout*)&dstImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((regionCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pRegions = (VkImageBlit*)stack_pRegions;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pRegions,
|
||
|
|
((regionCount)) * sizeof(const VkImageBlit));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
reservedunmarshal_VkImageBlit(readStream, 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(globalstate, (VkImageBlit*)(pRegions + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdBlitImage((VkCommandBuffer)dispatchHandle, srcImage, srcImageLayout,
|
||
|
|
dstImage, dstImageLayout, regionCount, pRegions, filter);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyBufferToImage: {
|
||
|
|
android::base::beginTrace("vkCmdCopyBufferToImage subdecode");
|
||
|
|
VkBuffer srcBuffer;
|
||
|
|
VkImage dstImage;
|
||
|
|
VkImageLayout dstImageLayout;
|
||
|
|
uint32_t regionCount;
|
||
|
|
const VkBufferImageCopy* pRegions;
|
||
|
|
VkBufferImageCopy stack_pRegions[MAX_STACK_ITEMS];
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&srcBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImage*)&dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
||
|
|
memcpy((VkImageLayout*)&dstImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((regionCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pRegions = (VkBufferImageCopy*)stack_pRegions;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pRegions,
|
||
|
|
((regionCount)) * sizeof(const VkBufferImageCopy));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
reservedunmarshal_VkBufferImageCopy(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkBufferImageCopy*)(pRegions + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pRegions) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
transform_tohost_VkBufferImageCopy(globalstate,
|
||
|
|
(VkBufferImageCopy*)(pRegions + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
this->on_vkCmdCopyBufferToImage(pool, (VkCommandBuffer)(boxed_dispatchHandle),
|
||
|
|
srcBuffer, dstImage, dstImageLayout, regionCount,
|
||
|
|
pRegions, context);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyImageToBuffer: {
|
||
|
|
android::base::beginTrace("vkCmdCopyImageToBuffer subdecode");
|
||
|
|
VkImage srcImage;
|
||
|
|
VkImageLayout srcImageLayout;
|
||
|
|
VkBuffer dstBuffer;
|
||
|
|
uint32_t regionCount;
|
||
|
|
const VkBufferImageCopy* pRegions;
|
||
|
|
VkBufferImageCopy stack_pRegions[MAX_STACK_ITEMS];
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImage*)&srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
|
||
|
|
memcpy((VkImageLayout*)&srcImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
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((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((regionCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pRegions = (VkBufferImageCopy*)stack_pRegions;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pRegions,
|
||
|
|
((regionCount)) * sizeof(const VkBufferImageCopy));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
reservedunmarshal_VkBufferImageCopy(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkBufferImageCopy*)(pRegions + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pRegions) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
transform_tohost_VkBufferImageCopy(globalstate,
|
||
|
|
(VkBufferImageCopy*)(pRegions + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
this->on_vkCmdCopyImageToBuffer(pool, (VkCommandBuffer)(boxed_dispatchHandle),
|
||
|
|
srcImage, srcImageLayout, dstBuffer, regionCount,
|
||
|
|
pRegions);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdUpdateBuffer: {
|
||
|
|
android::base::beginTrace("vkCmdUpdateBuffer subdecode");
|
||
|
|
VkBuffer dstBuffer;
|
||
|
|
VkDeviceSize dstOffset;
|
||
|
|
VkDeviceSize dataSize;
|
||
|
|
const void* pData;
|
||
|
|
uint8_t* stack_pData[MAX_STACK_ITEMS];
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
||
|
|
memcpy((VkDeviceSize*)&dstOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
memcpy((VkDeviceSize*)&dataSize, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
if (((dataSize)) <= MAX_STACK_ITEMS) {
|
||
|
|
pData = (void*)stack_pData;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pData, ((dataSize)) * sizeof(const uint8_t));
|
||
|
|
}
|
||
|
|
memcpy((void*)pData, *readStreamPtrPtr, ((dataSize)) * sizeof(const uint8_t));
|
||
|
|
*readStreamPtrPtr += ((dataSize)) * sizeof(const uint8_t);
|
||
|
|
vk->vkCmdUpdateBuffer((VkCommandBuffer)dispatchHandle, dstBuffer, dstOffset,
|
||
|
|
dataSize, pData);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdFillBuffer: {
|
||
|
|
android::base::beginTrace("vkCmdFillBuffer subdecode");
|
||
|
|
VkBuffer dstBuffer;
|
||
|
|
VkDeviceSize dstOffset;
|
||
|
|
VkDeviceSize size;
|
||
|
|
uint32_t data;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
||
|
|
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);
|
||
|
|
vk->vkCmdFillBuffer((VkCommandBuffer)dispatchHandle, dstBuffer, dstOffset, size,
|
||
|
|
data);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdClearColorImage: {
|
||
|
|
android::base::beginTrace("vkCmdClearColorImage subdecode");
|
||
|
|
VkImage image;
|
||
|
|
VkImageLayout imageLayout;
|
||
|
|
const VkClearColorValue* pColor;
|
||
|
|
VkClearColorValue stack_pColor[1];
|
||
|
|
uint32_t rangeCount;
|
||
|
|
const VkImageSubresourceRange* pRanges;
|
||
|
|
VkImageSubresourceRange stack_pRanges[MAX_STACK_ITEMS];
|
||
|
|
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));
|
||
|
|
memcpy((VkImageLayout*)&imageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
pColor = (VkClearColorValue*)stack_pColor;
|
||
|
|
reservedunmarshal_VkClearColorValue(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkClearColorValue*)(pColor), readStreamPtrPtr);
|
||
|
|
memcpy((uint32_t*)&rangeCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((rangeCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pRanges = (VkImageSubresourceRange*)stack_pRanges;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pRanges,
|
||
|
|
((rangeCount)) * sizeof(const VkImageSubresourceRange));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
|
||
|
|
reservedunmarshal_VkImageSubresourceRange(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkImageSubresourceRange*)(pRanges + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pColor) {
|
||
|
|
transform_tohost_VkClearColorValue(globalstate, (VkClearColorValue*)(pColor));
|
||
|
|
}
|
||
|
|
if (pRanges) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
|
||
|
|
transform_tohost_VkImageSubresourceRange(
|
||
|
|
globalstate, (VkImageSubresourceRange*)(pRanges + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdClearColorImage((VkCommandBuffer)dispatchHandle, image, imageLayout,
|
||
|
|
pColor, rangeCount, pRanges);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdClearDepthStencilImage: {
|
||
|
|
android::base::beginTrace("vkCmdClearDepthStencilImage subdecode");
|
||
|
|
VkImage image;
|
||
|
|
VkImageLayout imageLayout;
|
||
|
|
const VkClearDepthStencilValue* pDepthStencil;
|
||
|
|
VkClearDepthStencilValue stack_pDepthStencil[1];
|
||
|
|
uint32_t rangeCount;
|
||
|
|
const VkImageSubresourceRange* pRanges;
|
||
|
|
VkImageSubresourceRange stack_pRanges[MAX_STACK_ITEMS];
|
||
|
|
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));
|
||
|
|
memcpy((VkImageLayout*)&imageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
pDepthStencil = (VkClearDepthStencilValue*)stack_pDepthStencil;
|
||
|
|
reservedunmarshal_VkClearDepthStencilValue(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkClearDepthStencilValue*)(pDepthStencil), readStreamPtrPtr);
|
||
|
|
memcpy((uint32_t*)&rangeCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((rangeCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pRanges = (VkImageSubresourceRange*)stack_pRanges;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pRanges,
|
||
|
|
((rangeCount)) * sizeof(const VkImageSubresourceRange));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
|
||
|
|
reservedunmarshal_VkImageSubresourceRange(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkImageSubresourceRange*)(pRanges + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pDepthStencil) {
|
||
|
|
transform_tohost_VkClearDepthStencilValue(
|
||
|
|
globalstate, (VkClearDepthStencilValue*)(pDepthStencil));
|
||
|
|
}
|
||
|
|
if (pRanges) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
|
||
|
|
transform_tohost_VkImageSubresourceRange(
|
||
|
|
globalstate, (VkImageSubresourceRange*)(pRanges + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdClearDepthStencilImage((VkCommandBuffer)dispatchHandle, image, imageLayout,
|
||
|
|
pDepthStencil, rangeCount, pRanges);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdClearAttachments: {
|
||
|
|
android::base::beginTrace("vkCmdClearAttachments subdecode");
|
||
|
|
uint32_t attachmentCount;
|
||
|
|
const VkClearAttachment* pAttachments;
|
||
|
|
VkClearAttachment stack_pAttachments[MAX_STACK_ITEMS];
|
||
|
|
uint32_t rectCount;
|
||
|
|
const VkClearRect* pRects;
|
||
|
|
VkClearRect stack_pRects[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&attachmentCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((attachmentCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pAttachments = (VkClearAttachment*)stack_pAttachments;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pAttachments,
|
||
|
|
((attachmentCount)) * sizeof(const VkClearAttachment));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i) {
|
||
|
|
reservedunmarshal_VkClearAttachment(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkClearAttachment*)(pAttachments + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
memcpy((uint32_t*)&rectCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((rectCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pRects = (VkClearRect*)stack_pRects;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pRects, ((rectCount)) * sizeof(const VkClearRect));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i) {
|
||
|
|
reservedunmarshal_VkClearRect(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkClearRect*)(pRects + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pAttachments) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i) {
|
||
|
|
transform_tohost_VkClearAttachment(globalstate,
|
||
|
|
(VkClearAttachment*)(pAttachments + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (pRects) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i) {
|
||
|
|
transform_tohost_VkClearRect(globalstate, (VkClearRect*)(pRects + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdClearAttachments((VkCommandBuffer)dispatchHandle, attachmentCount,
|
||
|
|
pAttachments, rectCount, pRects);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdResolveImage: {
|
||
|
|
android::base::beginTrace("vkCmdResolveImage subdecode");
|
||
|
|
VkImage srcImage;
|
||
|
|
VkImageLayout srcImageLayout;
|
||
|
|
VkImage dstImage;
|
||
|
|
VkImageLayout dstImageLayout;
|
||
|
|
uint32_t regionCount;
|
||
|
|
const VkImageResolve* pRegions;
|
||
|
|
VkImageResolve stack_pRegions[MAX_STACK_ITEMS];
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImage*)&srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
|
||
|
|
memcpy((VkImageLayout*)&srcImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImage*)&dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
|
||
|
|
memcpy((VkImageLayout*)&dstImageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
memcpy((uint32_t*)®ionCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((regionCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pRegions = (VkImageResolve*)stack_pRegions;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pRegions,
|
||
|
|
((regionCount)) * sizeof(const VkImageResolve));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
reservedunmarshal_VkImageResolve(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkImageResolve*)(pRegions + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pRegions) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
|
||
|
|
transform_tohost_VkImageResolve(globalstate,
|
||
|
|
(VkImageResolve*)(pRegions + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdResolveImage((VkCommandBuffer)dispatchHandle, srcImage, srcImageLayout,
|
||
|
|
dstImage, dstImageLayout, regionCount, pRegions);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetEvent: {
|
||
|
|
android::base::beginTrace("vkCmdSetEvent subdecode");
|
||
|
|
VkEvent event;
|
||
|
|
VkPipelineStageFlags stageMask;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_0));
|
||
|
|
memcpy((VkPipelineStageFlags*)&stageMask, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineStageFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags);
|
||
|
|
vk->vkCmdSetEvent((VkCommandBuffer)dispatchHandle, event, stageMask);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdResetEvent: {
|
||
|
|
android::base::beginTrace("vkCmdResetEvent subdecode");
|
||
|
|
VkEvent event;
|
||
|
|
VkPipelineStageFlags stageMask;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_0));
|
||
|
|
memcpy((VkPipelineStageFlags*)&stageMask, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineStageFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags);
|
||
|
|
vk->vkCmdResetEvent((VkCommandBuffer)dispatchHandle, event, stageMask);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdWaitEvents: {
|
||
|
|
android::base::beginTrace("vkCmdWaitEvents subdecode");
|
||
|
|
uint32_t eventCount;
|
||
|
|
const VkEvent* pEvents;
|
||
|
|
VkEvent stack_pEvents[MAX_STACK_ITEMS];
|
||
|
|
VkPipelineStageFlags srcStageMask;
|
||
|
|
VkPipelineStageFlags dstStageMask;
|
||
|
|
uint32_t memoryBarrierCount;
|
||
|
|
const VkMemoryBarrier* pMemoryBarriers;
|
||
|
|
VkMemoryBarrier stack_pMemoryBarriers[MAX_STACK_ITEMS];
|
||
|
|
uint32_t bufferMemoryBarrierCount;
|
||
|
|
const VkBufferMemoryBarrier* pBufferMemoryBarriers;
|
||
|
|
VkBufferMemoryBarrier stack_pBufferMemoryBarriers[MAX_STACK_ITEMS];
|
||
|
|
uint32_t imageMemoryBarrierCount;
|
||
|
|
const VkImageMemoryBarrier* pImageMemoryBarriers;
|
||
|
|
VkImageMemoryBarrier stack_pImageMemoryBarriers[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&eventCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((eventCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pEvents = (VkEvent*)stack_pEvents;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pEvents, ((eventCount)) * sizeof(const VkEvent));
|
||
|
|
}
|
||
|
|
if (((eventCount))) {
|
||
|
|
uint8_t* cgen_var_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((eventCount));
|
||
|
|
for (uint32_t k = 0; k < ((eventCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_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);
|
||
|
|
if (((memoryBarrierCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pMemoryBarriers = (VkMemoryBarrier*)stack_pMemoryBarriers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pMemoryBarriers,
|
||
|
|
((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
|
||
|
|
reservedunmarshal_VkMemoryBarrier(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkMemoryBarrier*)(pMemoryBarriers + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
memcpy((uint32_t*)&bufferMemoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((bufferMemoryBarrierCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pBufferMemoryBarriers = (VkBufferMemoryBarrier*)stack_pBufferMemoryBarriers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pBufferMemoryBarriers,
|
||
|
|
((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
|
||
|
|
reservedunmarshal_VkBufferMemoryBarrier(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkBufferMemoryBarrier*)(pBufferMemoryBarriers + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
memcpy((uint32_t*)&imageMemoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((imageMemoryBarrierCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pImageMemoryBarriers = (VkImageMemoryBarrier*)stack_pImageMemoryBarriers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pImageMemoryBarriers,
|
||
|
|
((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
|
||
|
|
reservedunmarshal_VkImageMemoryBarrier(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkImageMemoryBarrier*)(pImageMemoryBarriers + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pMemoryBarriers) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
|
||
|
|
transform_tohost_VkMemoryBarrier(globalstate,
|
||
|
|
(VkMemoryBarrier*)(pMemoryBarriers + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (pBufferMemoryBarriers) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
|
||
|
|
transform_tohost_VkBufferMemoryBarrier(
|
||
|
|
globalstate, (VkBufferMemoryBarrier*)(pBufferMemoryBarriers + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (pImageMemoryBarriers) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
|
||
|
|
transform_tohost_VkImageMemoryBarrier(
|
||
|
|
globalstate, (VkImageMemoryBarrier*)(pImageMemoryBarriers + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdWaitEvents((VkCommandBuffer)dispatchHandle, eventCount, pEvents,
|
||
|
|
srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers,
|
||
|
|
bufferMemoryBarrierCount, pBufferMemoryBarriers,
|
||
|
|
imageMemoryBarrierCount, pImageMemoryBarriers);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdPipelineBarrier: {
|
||
|
|
android::base::beginTrace("vkCmdPipelineBarrier subdecode");
|
||
|
|
VkPipelineStageFlags srcStageMask;
|
||
|
|
VkPipelineStageFlags dstStageMask;
|
||
|
|
VkDependencyFlags dependencyFlags;
|
||
|
|
uint32_t memoryBarrierCount;
|
||
|
|
const VkMemoryBarrier* pMemoryBarriers;
|
||
|
|
VkMemoryBarrier stack_pMemoryBarriers[MAX_STACK_ITEMS];
|
||
|
|
uint32_t bufferMemoryBarrierCount;
|
||
|
|
const VkBufferMemoryBarrier* pBufferMemoryBarriers;
|
||
|
|
VkBufferMemoryBarrier stack_pBufferMemoryBarriers[MAX_STACK_ITEMS];
|
||
|
|
uint32_t imageMemoryBarrierCount;
|
||
|
|
const VkImageMemoryBarrier* pImageMemoryBarriers;
|
||
|
|
VkImageMemoryBarrier stack_pImageMemoryBarriers[MAX_STACK_ITEMS];
|
||
|
|
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);
|
||
|
|
if (((memoryBarrierCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pMemoryBarriers = (VkMemoryBarrier*)stack_pMemoryBarriers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pMemoryBarriers,
|
||
|
|
((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
|
||
|
|
reservedunmarshal_VkMemoryBarrier(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkMemoryBarrier*)(pMemoryBarriers + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
memcpy((uint32_t*)&bufferMemoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((bufferMemoryBarrierCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pBufferMemoryBarriers = (VkBufferMemoryBarrier*)stack_pBufferMemoryBarriers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pBufferMemoryBarriers,
|
||
|
|
((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
|
||
|
|
reservedunmarshal_VkBufferMemoryBarrier(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkBufferMemoryBarrier*)(pBufferMemoryBarriers + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
memcpy((uint32_t*)&imageMemoryBarrierCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((imageMemoryBarrierCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pImageMemoryBarriers = (VkImageMemoryBarrier*)stack_pImageMemoryBarriers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pImageMemoryBarriers,
|
||
|
|
((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
|
||
|
|
reservedunmarshal_VkImageMemoryBarrier(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkImageMemoryBarrier*)(pImageMemoryBarriers + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pMemoryBarriers) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
|
||
|
|
transform_tohost_VkMemoryBarrier(globalstate,
|
||
|
|
(VkMemoryBarrier*)(pMemoryBarriers + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (pBufferMemoryBarriers) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
|
||
|
|
transform_tohost_VkBufferMemoryBarrier(
|
||
|
|
globalstate, (VkBufferMemoryBarrier*)(pBufferMemoryBarriers + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (pImageMemoryBarriers) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
|
||
|
|
transform_tohost_VkImageMemoryBarrier(
|
||
|
|
globalstate, (VkImageMemoryBarrier*)(pImageMemoryBarriers + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
this->on_vkCmdPipelineBarrier(
|
||
|
|
pool, (VkCommandBuffer)(boxed_dispatchHandle), srcStageMask, dstStageMask,
|
||
|
|
dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount,
|
||
|
|
pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBeginQuery: {
|
||
|
|
android::base::beginTrace("vkCmdBeginQuery subdecode");
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t query;
|
||
|
|
VkQueryControlFlags flags;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkQueryPool*)&queryPool =
|
||
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_0));
|
||
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((VkQueryControlFlags*)&flags, *readStreamPtrPtr,
|
||
|
|
sizeof(VkQueryControlFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkQueryControlFlags);
|
||
|
|
vk->vkCmdBeginQuery((VkCommandBuffer)dispatchHandle, queryPool, query, flags);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndQuery: {
|
||
|
|
android::base::beginTrace("vkCmdEndQuery subdecode");
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t query;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkQueryPool*)&queryPool =
|
||
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_0));
|
||
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdEndQuery((VkCommandBuffer)dispatchHandle, queryPool, query);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdResetQueryPool: {
|
||
|
|
android::base::beginTrace("vkCmdResetQueryPool subdecode");
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t firstQuery;
|
||
|
|
uint32_t queryCount;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkQueryPool*)&queryPool =
|
||
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_0));
|
||
|
|
memcpy((uint32_t*)&firstQuery, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&queryCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdResetQueryPool((VkCommandBuffer)dispatchHandle, queryPool, firstQuery,
|
||
|
|
queryCount);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdWriteTimestamp: {
|
||
|
|
android::base::beginTrace("vkCmdWriteTimestamp subdecode");
|
||
|
|
VkPipelineStageFlagBits pipelineStage;
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t query;
|
||
|
|
memcpy((VkPipelineStageFlagBits*)&pipelineStage, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineStageFlagBits));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlagBits);
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkQueryPool*)&queryPool =
|
||
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_0));
|
||
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdWriteTimestamp((VkCommandBuffer)dispatchHandle, pipelineStage, queryPool,
|
||
|
|
query);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyQueryPoolResults: {
|
||
|
|
android::base::beginTrace("vkCmdCopyQueryPoolResults subdecode");
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t firstQuery;
|
||
|
|
uint32_t queryCount;
|
||
|
|
VkBuffer dstBuffer;
|
||
|
|
VkDeviceSize dstOffset;
|
||
|
|
VkDeviceSize stride;
|
||
|
|
VkQueryResultFlags flags;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkQueryPool*)&queryPool =
|
||
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_0));
|
||
|
|
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_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*)&stride, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
memcpy((VkQueryResultFlags*)&flags, *readStreamPtrPtr, sizeof(VkQueryResultFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkQueryResultFlags);
|
||
|
|
this->on_vkCmdCopyQueryPoolResults(pool, (VkCommandBuffer)(boxed_dispatchHandle),
|
||
|
|
queryPool, firstQuery, queryCount, dstBuffer,
|
||
|
|
dstOffset, stride, flags);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdPushConstants: {
|
||
|
|
android::base::beginTrace("vkCmdPushConstants subdecode");
|
||
|
|
VkPipelineLayout layout;
|
||
|
|
VkShaderStageFlags stageFlags;
|
||
|
|
uint32_t offset;
|
||
|
|
uint32_t size;
|
||
|
|
const void* pValues;
|
||
|
|
uint8_t* stack_pValues[MAX_STACK_ITEMS];
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkPipelineLayout*)&layout =
|
||
|
|
(VkPipelineLayout)unbox_VkPipelineLayout((VkPipelineLayout)(*&cgen_var_0));
|
||
|
|
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);
|
||
|
|
if (((size)) <= MAX_STACK_ITEMS) {
|
||
|
|
pValues = (void*)stack_pValues;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pValues, ((size)) * sizeof(const uint8_t));
|
||
|
|
}
|
||
|
|
memcpy((void*)pValues, *readStreamPtrPtr, ((size)) * sizeof(const uint8_t));
|
||
|
|
*readStreamPtrPtr += ((size)) * sizeof(const uint8_t);
|
||
|
|
vk->vkCmdPushConstants((VkCommandBuffer)dispatchHandle, layout, stageFlags, offset,
|
||
|
|
size, pValues);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBeginRenderPass: {
|
||
|
|
android::base::beginTrace("vkCmdBeginRenderPass subdecode");
|
||
|
|
const VkRenderPassBeginInfo* pRenderPassBegin;
|
||
|
|
VkRenderPassBeginInfo stack_pRenderPassBegin[1];
|
||
|
|
VkSubpassContents contents;
|
||
|
|
pRenderPassBegin = (VkRenderPassBeginInfo*)stack_pRenderPassBegin;
|
||
|
|
reservedunmarshal_VkRenderPassBeginInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkRenderPassBeginInfo*)(pRenderPassBegin),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
memcpy((VkSubpassContents*)&contents, *readStreamPtrPtr, sizeof(VkSubpassContents));
|
||
|
|
*readStreamPtrPtr += sizeof(VkSubpassContents);
|
||
|
|
if (pRenderPassBegin) {
|
||
|
|
transform_tohost_VkRenderPassBeginInfo(
|
||
|
|
globalstate, (VkRenderPassBeginInfo*)(pRenderPassBegin));
|
||
|
|
}
|
||
|
|
vk->vkCmdBeginRenderPass((VkCommandBuffer)dispatchHandle, pRenderPassBegin,
|
||
|
|
contents);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdNextSubpass: {
|
||
|
|
android::base::beginTrace("vkCmdNextSubpass subdecode");
|
||
|
|
VkSubpassContents contents;
|
||
|
|
memcpy((VkSubpassContents*)&contents, *readStreamPtrPtr, sizeof(VkSubpassContents));
|
||
|
|
*readStreamPtrPtr += sizeof(VkSubpassContents);
|
||
|
|
vk->vkCmdNextSubpass((VkCommandBuffer)dispatchHandle, contents);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndRenderPass: {
|
||
|
|
android::base::beginTrace("vkCmdEndRenderPass subdecode");
|
||
|
|
vk->vkCmdEndRenderPass((VkCommandBuffer)dispatchHandle);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdExecuteCommands: {
|
||
|
|
android::base::beginTrace("vkCmdExecuteCommands subdecode");
|
||
|
|
uint32_t commandBufferCount;
|
||
|
|
const VkCommandBuffer* pCommandBuffers;
|
||
|
|
VkCommandBuffer stack_pCommandBuffers[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&commandBufferCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((commandBufferCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pCommandBuffers = (VkCommandBuffer*)stack_pCommandBuffers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pCommandBuffers,
|
||
|
|
((commandBufferCount)) * sizeof(const VkCommandBuffer));
|
||
|
|
}
|
||
|
|
if (((commandBufferCount))) {
|
||
|
|
uint8_t* cgen_var_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((commandBufferCount));
|
||
|
|
for (uint32_t k = 0; k < ((commandBufferCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_ptr + k * 8, sizeof(uint64_t));
|
||
|
|
*(((VkCommandBuffer*)pCommandBuffers) + k) =
|
||
|
|
(VkCommandBuffer)unbox_VkCommandBuffer((VkCommandBuffer)tmpval);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
this->on_vkCmdExecuteCommands(pool, (VkCommandBuffer)(boxed_dispatchHandle),
|
||
|
|
commandBufferCount, pCommandBuffers);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_VERSION_1_1
|
||
|
|
case OP_vkCmdSetDeviceMask: {
|
||
|
|
android::base::beginTrace("vkCmdSetDeviceMask subdecode");
|
||
|
|
uint32_t deviceMask;
|
||
|
|
memcpy((uint32_t*)&deviceMask, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdSetDeviceMask((VkCommandBuffer)dispatchHandle, deviceMask);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDispatchBase: {
|
||
|
|
android::base::beginTrace("vkCmdDispatchBase subdecode");
|
||
|
|
uint32_t baseGroupX;
|
||
|
|
uint32_t baseGroupY;
|
||
|
|
uint32_t baseGroupZ;
|
||
|
|
uint32_t groupCountX;
|
||
|
|
uint32_t groupCountY;
|
||
|
|
uint32_t groupCountZ;
|
||
|
|
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);
|
||
|
|
vk->vkCmdDispatchBase((VkCommandBuffer)dispatchHandle, baseGroupX, baseGroupY,
|
||
|
|
baseGroupZ, groupCountX, groupCountY, groupCountZ);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_VERSION_1_2
|
||
|
|
case OP_vkCmdDrawIndirectCount: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndirectCount subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
VkBuffer countBuffer;
|
||
|
|
VkDeviceSize countBufferOffset;
|
||
|
|
uint32_t maxDrawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndirectCount((VkCommandBuffer)dispatchHandle, buffer, offset,
|
||
|
|
countBuffer, countBufferOffset, maxDrawCount, stride);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawIndexedIndirectCount: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndexedIndirectCount subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
VkBuffer countBuffer;
|
||
|
|
VkDeviceSize countBufferOffset;
|
||
|
|
uint32_t maxDrawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndexedIndirectCount((VkCommandBuffer)dispatchHandle, buffer, offset,
|
||
|
|
countBuffer, countBufferOffset, maxDrawCount,
|
||
|
|
stride);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBeginRenderPass2: {
|
||
|
|
android::base::beginTrace("vkCmdBeginRenderPass2 subdecode");
|
||
|
|
const VkRenderPassBeginInfo* pRenderPassBegin;
|
||
|
|
VkRenderPassBeginInfo stack_pRenderPassBegin[1];
|
||
|
|
const VkSubpassBeginInfo* pSubpassBeginInfo;
|
||
|
|
VkSubpassBeginInfo stack_pSubpassBeginInfo[1];
|
||
|
|
pRenderPassBegin = (VkRenderPassBeginInfo*)stack_pRenderPassBegin;
|
||
|
|
reservedunmarshal_VkRenderPassBeginInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkRenderPassBeginInfo*)(pRenderPassBegin),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
pSubpassBeginInfo = (VkSubpassBeginInfo*)stack_pSubpassBeginInfo;
|
||
|
|
reservedunmarshal_VkSubpassBeginInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pRenderPassBegin) {
|
||
|
|
transform_tohost_VkRenderPassBeginInfo(
|
||
|
|
globalstate, (VkRenderPassBeginInfo*)(pRenderPassBegin));
|
||
|
|
}
|
||
|
|
if (pSubpassBeginInfo) {
|
||
|
|
transform_tohost_VkSubpassBeginInfo(globalstate,
|
||
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdBeginRenderPass2((VkCommandBuffer)dispatchHandle, pRenderPassBegin,
|
||
|
|
pSubpassBeginInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdNextSubpass2: {
|
||
|
|
android::base::beginTrace("vkCmdNextSubpass2 subdecode");
|
||
|
|
const VkSubpassBeginInfo* pSubpassBeginInfo;
|
||
|
|
VkSubpassBeginInfo stack_pSubpassBeginInfo[1];
|
||
|
|
const VkSubpassEndInfo* pSubpassEndInfo;
|
||
|
|
VkSubpassEndInfo stack_pSubpassEndInfo[1];
|
||
|
|
pSubpassBeginInfo = (VkSubpassBeginInfo*)stack_pSubpassBeginInfo;
|
||
|
|
reservedunmarshal_VkSubpassBeginInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
pSubpassEndInfo = (VkSubpassEndInfo*)stack_pSubpassEndInfo;
|
||
|
|
reservedunmarshal_VkSubpassEndInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pSubpassBeginInfo) {
|
||
|
|
transform_tohost_VkSubpassBeginInfo(globalstate,
|
||
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo));
|
||
|
|
}
|
||
|
|
if (pSubpassEndInfo) {
|
||
|
|
transform_tohost_VkSubpassEndInfo(globalstate,
|
||
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdNextSubpass2((VkCommandBuffer)dispatchHandle, pSubpassBeginInfo,
|
||
|
|
pSubpassEndInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndRenderPass2: {
|
||
|
|
android::base::beginTrace("vkCmdEndRenderPass2 subdecode");
|
||
|
|
const VkSubpassEndInfo* pSubpassEndInfo;
|
||
|
|
VkSubpassEndInfo stack_pSubpassEndInfo[1];
|
||
|
|
pSubpassEndInfo = (VkSubpassEndInfo*)stack_pSubpassEndInfo;
|
||
|
|
reservedunmarshal_VkSubpassEndInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pSubpassEndInfo) {
|
||
|
|
transform_tohost_VkSubpassEndInfo(globalstate,
|
||
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdEndRenderPass2((VkCommandBuffer)dispatchHandle, pSubpassEndInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_swapchain
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_display
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_display_swapchain
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_xlib_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_xcb_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_wayland_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_android_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_win32_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_sampler_mirror_clamp_to_edge
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_video_queue
|
||
|
|
case OP_vkCmdBeginVideoCodingKHR: {
|
||
|
|
android::base::beginTrace("vkCmdBeginVideoCodingKHR subdecode");
|
||
|
|
const VkVideoBeginCodingInfoKHR* pBeginInfo;
|
||
|
|
VkVideoBeginCodingInfoKHR stack_pBeginInfo[1];
|
||
|
|
pBeginInfo = (VkVideoBeginCodingInfoKHR*)stack_pBeginInfo;
|
||
|
|
reservedunmarshal_VkVideoBeginCodingInfoKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkVideoBeginCodingInfoKHR*)(pBeginInfo), readStreamPtrPtr);
|
||
|
|
if (pBeginInfo) {
|
||
|
|
transform_tohost_VkVideoBeginCodingInfoKHR(
|
||
|
|
globalstate, (VkVideoBeginCodingInfoKHR*)(pBeginInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdBeginVideoCodingKHR((VkCommandBuffer)dispatchHandle, pBeginInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndVideoCodingKHR: {
|
||
|
|
android::base::beginTrace("vkCmdEndVideoCodingKHR subdecode");
|
||
|
|
const VkVideoEndCodingInfoKHR* pEndCodingInfo;
|
||
|
|
VkVideoEndCodingInfoKHR stack_pEndCodingInfo[1];
|
||
|
|
pEndCodingInfo = (VkVideoEndCodingInfoKHR*)stack_pEndCodingInfo;
|
||
|
|
reservedunmarshal_VkVideoEndCodingInfoKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkVideoEndCodingInfoKHR*)(pEndCodingInfo), readStreamPtrPtr);
|
||
|
|
if (pEndCodingInfo) {
|
||
|
|
transform_tohost_VkVideoEndCodingInfoKHR(
|
||
|
|
globalstate, (VkVideoEndCodingInfoKHR*)(pEndCodingInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdEndVideoCodingKHR((VkCommandBuffer)dispatchHandle, pEndCodingInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdControlVideoCodingKHR: {
|
||
|
|
android::base::beginTrace("vkCmdControlVideoCodingKHR subdecode");
|
||
|
|
const VkVideoCodingControlInfoKHR* pCodingControlInfo;
|
||
|
|
VkVideoCodingControlInfoKHR stack_pCodingControlInfo[1];
|
||
|
|
pCodingControlInfo = (VkVideoCodingControlInfoKHR*)stack_pCodingControlInfo;
|
||
|
|
reservedunmarshal_VkVideoCodingControlInfoKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkVideoCodingControlInfoKHR*)(pCodingControlInfo), readStreamPtrPtr);
|
||
|
|
if (pCodingControlInfo) {
|
||
|
|
transform_tohost_VkVideoCodingControlInfoKHR(
|
||
|
|
globalstate, (VkVideoCodingControlInfoKHR*)(pCodingControlInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdControlVideoCodingKHR((VkCommandBuffer)dispatchHandle, pCodingControlInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_video_decode_queue
|
||
|
|
case OP_vkCmdDecodeVideoKHR: {
|
||
|
|
android::base::beginTrace("vkCmdDecodeVideoKHR subdecode");
|
||
|
|
const VkVideoDecodeInfoKHR* pFrameInfo;
|
||
|
|
VkVideoDecodeInfoKHR stack_pFrameInfo[1];
|
||
|
|
pFrameInfo = (VkVideoDecodeInfoKHR*)stack_pFrameInfo;
|
||
|
|
reservedunmarshal_VkVideoDecodeInfoKHR(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkVideoDecodeInfoKHR*)(pFrameInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pFrameInfo) {
|
||
|
|
transform_tohost_VkVideoDecodeInfoKHR(globalstate,
|
||
|
|
(VkVideoDecodeInfoKHR*)(pFrameInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdDecodeVideoKHR((VkCommandBuffer)dispatchHandle, pFrameInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_dynamic_rendering
|
||
|
|
case OP_vkCmdBeginRenderingKHR: {
|
||
|
|
android::base::beginTrace("vkCmdBeginRenderingKHR subdecode");
|
||
|
|
const VkRenderingInfoKHR* pRenderingInfo;
|
||
|
|
VkRenderingInfoKHR stack_pRenderingInfo[1];
|
||
|
|
pRenderingInfo = (VkRenderingInfoKHR*)stack_pRenderingInfo;
|
||
|
|
reservedunmarshal_VkRenderingInfoKHR(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkRenderingInfoKHR*)(pRenderingInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pRenderingInfo) {
|
||
|
|
transform_tohost_VkRenderingInfoKHR(globalstate,
|
||
|
|
(VkRenderingInfoKHR*)(pRenderingInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdBeginRenderingKHR((VkCommandBuffer)dispatchHandle, pRenderingInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndRenderingKHR: {
|
||
|
|
android::base::beginTrace("vkCmdEndRenderingKHR subdecode");
|
||
|
|
vk->vkCmdEndRenderingKHR((VkCommandBuffer)dispatchHandle);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_multiview
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_get_physical_device_properties2
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_device_group
|
||
|
|
case OP_vkCmdSetDeviceMaskKHR: {
|
||
|
|
android::base::beginTrace("vkCmdSetDeviceMaskKHR subdecode");
|
||
|
|
uint32_t deviceMask;
|
||
|
|
memcpy((uint32_t*)&deviceMask, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdSetDeviceMaskKHR((VkCommandBuffer)dispatchHandle, deviceMask);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDispatchBaseKHR: {
|
||
|
|
android::base::beginTrace("vkCmdDispatchBaseKHR subdecode");
|
||
|
|
uint32_t baseGroupX;
|
||
|
|
uint32_t baseGroupY;
|
||
|
|
uint32_t baseGroupZ;
|
||
|
|
uint32_t groupCountX;
|
||
|
|
uint32_t groupCountY;
|
||
|
|
uint32_t groupCountZ;
|
||
|
|
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);
|
||
|
|
vk->vkCmdDispatchBaseKHR((VkCommandBuffer)dispatchHandle, baseGroupX, baseGroupY,
|
||
|
|
baseGroupZ, groupCountX, groupCountY, groupCountZ);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_shader_draw_parameters
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_maintenance1
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_device_group_creation
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_memory_capabilities
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_memory
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_memory_win32
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_memory_fd
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_win32_keyed_mutex
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_semaphore_capabilities
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_semaphore
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_semaphore_win32
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_semaphore_fd
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_push_descriptor
|
||
|
|
case OP_vkCmdPushDescriptorSetKHR: {
|
||
|
|
android::base::beginTrace("vkCmdPushDescriptorSetKHR subdecode");
|
||
|
|
VkPipelineBindPoint pipelineBindPoint;
|
||
|
|
VkPipelineLayout layout;
|
||
|
|
uint32_t set;
|
||
|
|
uint32_t descriptorWriteCount;
|
||
|
|
const VkWriteDescriptorSet* pDescriptorWrites;
|
||
|
|
VkWriteDescriptorSet stack_pDescriptorWrites[MAX_STACK_ITEMS];
|
||
|
|
memcpy((VkPipelineBindPoint*)&pipelineBindPoint, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineBindPoint));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineBindPoint);
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkPipelineLayout*)&layout =
|
||
|
|
(VkPipelineLayout)unbox_VkPipelineLayout((VkPipelineLayout)(*&cgen_var_0));
|
||
|
|
memcpy((uint32_t*)&set, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&descriptorWriteCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((descriptorWriteCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pDescriptorWrites = (VkWriteDescriptorSet*)stack_pDescriptorWrites;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pDescriptorWrites,
|
||
|
|
((descriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
|
||
|
|
reservedunmarshal_VkWriteDescriptorSet(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkWriteDescriptorSet*)(pDescriptorWrites + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pDescriptorWrites) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
|
||
|
|
transform_tohost_VkWriteDescriptorSet(
|
||
|
|
globalstate, (VkWriteDescriptorSet*)(pDescriptorWrites + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdPushDescriptorSetKHR((VkCommandBuffer)dispatchHandle, pipelineBindPoint,
|
||
|
|
layout, set, descriptorWriteCount, pDescriptorWrites);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdPushDescriptorSetWithTemplateKHR: {
|
||
|
|
android::base::beginTrace("vkCmdPushDescriptorSetWithTemplateKHR subdecode");
|
||
|
|
VkDescriptorUpdateTemplate descriptorUpdateTemplate;
|
||
|
|
VkPipelineLayout layout;
|
||
|
|
uint32_t set;
|
||
|
|
const void* pData;
|
||
|
|
uint8_t* stack_pData[1];
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate =
|
||
|
|
(VkDescriptorUpdateTemplate)unbox_VkDescriptorUpdateTemplate(
|
||
|
|
(VkDescriptorUpdateTemplate)(*&cgen_var_0));
|
||
|
|
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);
|
||
|
|
// WARNING PTR CHECK
|
||
|
|
memcpy((void**)&pData, (*readStreamPtrPtr), 8);
|
||
|
|
android::base::Stream::fromBe64((uint8_t*)&pData);
|
||
|
|
*readStreamPtrPtr += 8;
|
||
|
|
if (pData) {
|
||
|
|
pData = (void*)stack_pData;
|
||
|
|
memcpy((void*)pData, *readStreamPtrPtr, sizeof(const uint8_t));
|
||
|
|
*readStreamPtrPtr += sizeof(const uint8_t);
|
||
|
|
}
|
||
|
|
vk->vkCmdPushDescriptorSetWithTemplateKHR(
|
||
|
|
(VkCommandBuffer)dispatchHandle, descriptorUpdateTemplate, layout, set, pData);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_imageless_framebuffer
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_create_renderpass2
|
||
|
|
case OP_vkCmdBeginRenderPass2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdBeginRenderPass2KHR subdecode");
|
||
|
|
const VkRenderPassBeginInfo* pRenderPassBegin;
|
||
|
|
VkRenderPassBeginInfo stack_pRenderPassBegin[1];
|
||
|
|
const VkSubpassBeginInfo* pSubpassBeginInfo;
|
||
|
|
VkSubpassBeginInfo stack_pSubpassBeginInfo[1];
|
||
|
|
pRenderPassBegin = (VkRenderPassBeginInfo*)stack_pRenderPassBegin;
|
||
|
|
reservedunmarshal_VkRenderPassBeginInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkRenderPassBeginInfo*)(pRenderPassBegin),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
pSubpassBeginInfo = (VkSubpassBeginInfo*)stack_pSubpassBeginInfo;
|
||
|
|
reservedunmarshal_VkSubpassBeginInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pRenderPassBegin) {
|
||
|
|
transform_tohost_VkRenderPassBeginInfo(
|
||
|
|
globalstate, (VkRenderPassBeginInfo*)(pRenderPassBegin));
|
||
|
|
}
|
||
|
|
if (pSubpassBeginInfo) {
|
||
|
|
transform_tohost_VkSubpassBeginInfo(globalstate,
|
||
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdBeginRenderPass2KHR((VkCommandBuffer)dispatchHandle, pRenderPassBegin,
|
||
|
|
pSubpassBeginInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdNextSubpass2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdNextSubpass2KHR subdecode");
|
||
|
|
const VkSubpassBeginInfo* pSubpassBeginInfo;
|
||
|
|
VkSubpassBeginInfo stack_pSubpassBeginInfo[1];
|
||
|
|
const VkSubpassEndInfo* pSubpassEndInfo;
|
||
|
|
VkSubpassEndInfo stack_pSubpassEndInfo[1];
|
||
|
|
pSubpassBeginInfo = (VkSubpassBeginInfo*)stack_pSubpassBeginInfo;
|
||
|
|
reservedunmarshal_VkSubpassBeginInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
pSubpassEndInfo = (VkSubpassEndInfo*)stack_pSubpassEndInfo;
|
||
|
|
reservedunmarshal_VkSubpassEndInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pSubpassBeginInfo) {
|
||
|
|
transform_tohost_VkSubpassBeginInfo(globalstate,
|
||
|
|
(VkSubpassBeginInfo*)(pSubpassBeginInfo));
|
||
|
|
}
|
||
|
|
if (pSubpassEndInfo) {
|
||
|
|
transform_tohost_VkSubpassEndInfo(globalstate,
|
||
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdNextSubpass2KHR((VkCommandBuffer)dispatchHandle, pSubpassBeginInfo,
|
||
|
|
pSubpassEndInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndRenderPass2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdEndRenderPass2KHR subdecode");
|
||
|
|
const VkSubpassEndInfo* pSubpassEndInfo;
|
||
|
|
VkSubpassEndInfo stack_pSubpassEndInfo[1];
|
||
|
|
pSubpassEndInfo = (VkSubpassEndInfo*)stack_pSubpassEndInfo;
|
||
|
|
reservedunmarshal_VkSubpassEndInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pSubpassEndInfo) {
|
||
|
|
transform_tohost_VkSubpassEndInfo(globalstate,
|
||
|
|
(VkSubpassEndInfo*)(pSubpassEndInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdEndRenderPass2KHR((VkCommandBuffer)dispatchHandle, pSubpassEndInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_shared_presentable_image
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_fence_capabilities
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_fence
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_fence_win32
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_external_fence_fd
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_performance_query
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_maintenance2
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_get_surface_capabilities2
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_variable_pointers
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_get_display_properties2
|
||
|
|
#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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_image_format_list
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_sampler_ycbcr_conversion
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_bind_memory2
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_portability_subset
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_maintenance3
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_draw_indirect_count
|
||
|
|
case OP_vkCmdDrawIndirectCountKHR: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndirectCountKHR subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
VkBuffer countBuffer;
|
||
|
|
VkDeviceSize countBufferOffset;
|
||
|
|
uint32_t maxDrawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndirectCountKHR((VkCommandBuffer)dispatchHandle, buffer, offset,
|
||
|
|
countBuffer, countBufferOffset, maxDrawCount, stride);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawIndexedIndirectCountKHR: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndexedIndirectCountKHR subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
VkBuffer countBuffer;
|
||
|
|
VkDeviceSize countBufferOffset;
|
||
|
|
uint32_t maxDrawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndexedIndirectCountKHR((VkCommandBuffer)dispatchHandle, buffer,
|
||
|
|
offset, countBuffer, countBufferOffset,
|
||
|
|
maxDrawCount, stride);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_vulkan_memory_model
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_shader_terminate_invocation
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_fragment_shading_rate
|
||
|
|
case OP_vkCmdSetFragmentShadingRateKHR: {
|
||
|
|
android::base::beginTrace("vkCmdSetFragmentShadingRateKHR subdecode");
|
||
|
|
const VkExtent2D* pFragmentSize;
|
||
|
|
VkExtent2D stack_pFragmentSize[1];
|
||
|
|
VkFragmentShadingRateCombinerOpKHR combinerOps[2];
|
||
|
|
pFragmentSize = (VkExtent2D*)stack_pFragmentSize;
|
||
|
|
reservedunmarshal_VkExtent2D(readStream, 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(globalstate, (VkExtent2D*)(pFragmentSize));
|
||
|
|
}
|
||
|
|
vk->vkCmdSetFragmentShadingRateKHR((VkCommandBuffer)dispatchHandle, pFragmentSize,
|
||
|
|
combinerOps);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_uniform_buffer_standard_layout
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_buffer_device_address
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_deferred_host_operations
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_pipeline_executable_properties
|
||
|
|
#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 subdecode");
|
||
|
|
const VkVideoEncodeInfoKHR* pEncodeInfo;
|
||
|
|
VkVideoEncodeInfoKHR stack_pEncodeInfo[1];
|
||
|
|
pEncodeInfo = (VkVideoEncodeInfoKHR*)stack_pEncodeInfo;
|
||
|
|
reservedunmarshal_VkVideoEncodeInfoKHR(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkVideoEncodeInfoKHR*)(pEncodeInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pEncodeInfo) {
|
||
|
|
transform_tohost_VkVideoEncodeInfoKHR(globalstate,
|
||
|
|
(VkVideoEncodeInfoKHR*)(pEncodeInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdEncodeVideoKHR((VkCommandBuffer)dispatchHandle, pEncodeInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_synchronization2
|
||
|
|
case OP_vkCmdSetEvent2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdSetEvent2KHR subdecode");
|
||
|
|
VkEvent event;
|
||
|
|
const VkDependencyInfoKHR* pDependencyInfo;
|
||
|
|
VkDependencyInfoKHR stack_pDependencyInfo[1];
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_0));
|
||
|
|
pDependencyInfo = (VkDependencyInfoKHR*)stack_pDependencyInfo;
|
||
|
|
reservedunmarshal_VkDependencyInfoKHR(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkDependencyInfoKHR*)(pDependencyInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pDependencyInfo) {
|
||
|
|
transform_tohost_VkDependencyInfoKHR(globalstate,
|
||
|
|
(VkDependencyInfoKHR*)(pDependencyInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdSetEvent2KHR((VkCommandBuffer)dispatchHandle, event, pDependencyInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdResetEvent2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdResetEvent2KHR subdecode");
|
||
|
|
VkEvent event;
|
||
|
|
VkPipelineStageFlags2KHR stageMask;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkEvent*)&event = (VkEvent)unbox_VkEvent((VkEvent)(*&cgen_var_0));
|
||
|
|
memcpy((VkPipelineStageFlags2KHR*)&stageMask, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineStageFlags2KHR));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags2KHR);
|
||
|
|
vk->vkCmdResetEvent2KHR((VkCommandBuffer)dispatchHandle, event, stageMask);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdWaitEvents2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdWaitEvents2KHR subdecode");
|
||
|
|
uint32_t eventCount;
|
||
|
|
const VkEvent* pEvents;
|
||
|
|
VkEvent stack_pEvents[MAX_STACK_ITEMS];
|
||
|
|
const VkDependencyInfoKHR* pDependencyInfos;
|
||
|
|
VkDependencyInfoKHR stack_pDependencyInfos[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&eventCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((eventCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pEvents = (VkEvent*)stack_pEvents;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pEvents, ((eventCount)) * sizeof(const VkEvent));
|
||
|
|
}
|
||
|
|
if (((eventCount))) {
|
||
|
|
uint8_t* cgen_var_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((eventCount));
|
||
|
|
for (uint32_t k = 0; k < ((eventCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_ptr + k * 8, sizeof(uint64_t));
|
||
|
|
*(((VkEvent*)pEvents) + k) = (VkEvent)unbox_VkEvent((VkEvent)tmpval);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (((eventCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pDependencyInfos = (VkDependencyInfoKHR*)stack_pDependencyInfos;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pDependencyInfos,
|
||
|
|
((eventCount)) * sizeof(const VkDependencyInfoKHR));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
|
||
|
|
reservedunmarshal_VkDependencyInfoKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkDependencyInfoKHR*)(pDependencyInfos + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pDependencyInfos) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
|
||
|
|
transform_tohost_VkDependencyInfoKHR(
|
||
|
|
globalstate, (VkDependencyInfoKHR*)(pDependencyInfos + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdWaitEvents2KHR((VkCommandBuffer)dispatchHandle, eventCount, pEvents,
|
||
|
|
pDependencyInfos);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdPipelineBarrier2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdPipelineBarrier2KHR subdecode");
|
||
|
|
const VkDependencyInfoKHR* pDependencyInfo;
|
||
|
|
VkDependencyInfoKHR stack_pDependencyInfo[1];
|
||
|
|
pDependencyInfo = (VkDependencyInfoKHR*)stack_pDependencyInfo;
|
||
|
|
reservedunmarshal_VkDependencyInfoKHR(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkDependencyInfoKHR*)(pDependencyInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pDependencyInfo) {
|
||
|
|
transform_tohost_VkDependencyInfoKHR(globalstate,
|
||
|
|
(VkDependencyInfoKHR*)(pDependencyInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdPipelineBarrier2KHR((VkCommandBuffer)dispatchHandle, pDependencyInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdWriteTimestamp2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdWriteTimestamp2KHR subdecode");
|
||
|
|
VkPipelineStageFlags2KHR stage;
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t query;
|
||
|
|
memcpy((VkPipelineStageFlags2KHR*)&stage, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineStageFlags2KHR));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags2KHR);
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkQueryPool*)&queryPool =
|
||
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_0));
|
||
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdWriteTimestamp2KHR((VkCommandBuffer)dispatchHandle, stage, queryPool,
|
||
|
|
query);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdWriteBufferMarker2AMD: {
|
||
|
|
android::base::beginTrace("vkCmdWriteBufferMarker2AMD subdecode");
|
||
|
|
VkPipelineStageFlags2KHR stage;
|
||
|
|
VkBuffer dstBuffer;
|
||
|
|
VkDeviceSize dstOffset;
|
||
|
|
uint32_t marker;
|
||
|
|
memcpy((VkPipelineStageFlags2KHR*)&stage, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineStageFlags2KHR));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlags2KHR);
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
||
|
|
memcpy((VkDeviceSize*)&dstOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
memcpy((uint32_t*)&marker, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdWriteBufferMarker2AMD((VkCommandBuffer)dispatchHandle, stage, dstBuffer,
|
||
|
|
dstOffset, marker);
|
||
|
|
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 subdecode");
|
||
|
|
const VkCopyBufferInfo2KHR* pCopyBufferInfo;
|
||
|
|
VkCopyBufferInfo2KHR stack_pCopyBufferInfo[1];
|
||
|
|
pCopyBufferInfo = (VkCopyBufferInfo2KHR*)stack_pCopyBufferInfo;
|
||
|
|
reservedunmarshal_VkCopyBufferInfo2KHR(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCopyBufferInfo2KHR*)(pCopyBufferInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pCopyBufferInfo) {
|
||
|
|
transform_tohost_VkCopyBufferInfo2KHR(globalstate,
|
||
|
|
(VkCopyBufferInfo2KHR*)(pCopyBufferInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdCopyBuffer2KHR((VkCommandBuffer)dispatchHandle, pCopyBufferInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyImage2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdCopyImage2KHR subdecode");
|
||
|
|
const VkCopyImageInfo2KHR* pCopyImageInfo;
|
||
|
|
VkCopyImageInfo2KHR stack_pCopyImageInfo[1];
|
||
|
|
pCopyImageInfo = (VkCopyImageInfo2KHR*)stack_pCopyImageInfo;
|
||
|
|
reservedunmarshal_VkCopyImageInfo2KHR(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCopyImageInfo2KHR*)(pCopyImageInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pCopyImageInfo) {
|
||
|
|
transform_tohost_VkCopyImageInfo2KHR(globalstate,
|
||
|
|
(VkCopyImageInfo2KHR*)(pCopyImageInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdCopyImage2KHR((VkCommandBuffer)dispatchHandle, pCopyImageInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyBufferToImage2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdCopyBufferToImage2KHR subdecode");
|
||
|
|
const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo;
|
||
|
|
VkCopyBufferToImageInfo2KHR stack_pCopyBufferToImageInfo[1];
|
||
|
|
pCopyBufferToImageInfo = (VkCopyBufferToImageInfo2KHR*)stack_pCopyBufferToImageInfo;
|
||
|
|
reservedunmarshal_VkCopyBufferToImageInfo2KHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCopyBufferToImageInfo2KHR*)(pCopyBufferToImageInfo), readStreamPtrPtr);
|
||
|
|
if (pCopyBufferToImageInfo) {
|
||
|
|
transform_tohost_VkCopyBufferToImageInfo2KHR(
|
||
|
|
globalstate, (VkCopyBufferToImageInfo2KHR*)(pCopyBufferToImageInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdCopyBufferToImage2KHR((VkCommandBuffer)dispatchHandle,
|
||
|
|
pCopyBufferToImageInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyImageToBuffer2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdCopyImageToBuffer2KHR subdecode");
|
||
|
|
const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo;
|
||
|
|
VkCopyImageToBufferInfo2KHR stack_pCopyImageToBufferInfo[1];
|
||
|
|
pCopyImageToBufferInfo = (VkCopyImageToBufferInfo2KHR*)stack_pCopyImageToBufferInfo;
|
||
|
|
reservedunmarshal_VkCopyImageToBufferInfo2KHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCopyImageToBufferInfo2KHR*)(pCopyImageToBufferInfo), readStreamPtrPtr);
|
||
|
|
if (pCopyImageToBufferInfo) {
|
||
|
|
transform_tohost_VkCopyImageToBufferInfo2KHR(
|
||
|
|
globalstate, (VkCopyImageToBufferInfo2KHR*)(pCopyImageToBufferInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdCopyImageToBuffer2KHR((VkCommandBuffer)dispatchHandle,
|
||
|
|
pCopyImageToBufferInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBlitImage2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdBlitImage2KHR subdecode");
|
||
|
|
const VkBlitImageInfo2KHR* pBlitImageInfo;
|
||
|
|
VkBlitImageInfo2KHR stack_pBlitImageInfo[1];
|
||
|
|
pBlitImageInfo = (VkBlitImageInfo2KHR*)stack_pBlitImageInfo;
|
||
|
|
reservedunmarshal_VkBlitImageInfo2KHR(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkBlitImageInfo2KHR*)(pBlitImageInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pBlitImageInfo) {
|
||
|
|
transform_tohost_VkBlitImageInfo2KHR(globalstate,
|
||
|
|
(VkBlitImageInfo2KHR*)(pBlitImageInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdBlitImage2KHR((VkCommandBuffer)dispatchHandle, pBlitImageInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdResolveImage2KHR: {
|
||
|
|
android::base::beginTrace("vkCmdResolveImage2KHR subdecode");
|
||
|
|
const VkResolveImageInfo2KHR* pResolveImageInfo;
|
||
|
|
VkResolveImageInfo2KHR stack_pResolveImageInfo[1];
|
||
|
|
pResolveImageInfo = (VkResolveImageInfo2KHR*)stack_pResolveImageInfo;
|
||
|
|
reservedunmarshal_VkResolveImageInfo2KHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkResolveImageInfo2KHR*)(pResolveImageInfo), readStreamPtrPtr);
|
||
|
|
if (pResolveImageInfo) {
|
||
|
|
transform_tohost_VkResolveImageInfo2KHR(
|
||
|
|
globalstate, (VkResolveImageInfo2KHR*)(pResolveImageInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdResolveImage2KHR((VkCommandBuffer)dispatchHandle, pResolveImageInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_format_feature_flags2
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_maintenance4
|
||
|
|
#endif
|
||
|
|
#ifdef VK_ANDROID_native_buffer
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_debug_report
|
||
|
|
#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_vkCmdDebugMarkerBeginEXT: {
|
||
|
|
android::base::beginTrace("vkCmdDebugMarkerBeginEXT subdecode");
|
||
|
|
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo;
|
||
|
|
VkDebugMarkerMarkerInfoEXT stack_pMarkerInfo[1];
|
||
|
|
pMarkerInfo = (VkDebugMarkerMarkerInfoEXT*)stack_pMarkerInfo;
|
||
|
|
reservedunmarshal_VkDebugMarkerMarkerInfoEXT(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkDebugMarkerMarkerInfoEXT*)(pMarkerInfo), readStreamPtrPtr);
|
||
|
|
if (pMarkerInfo) {
|
||
|
|
transform_tohost_VkDebugMarkerMarkerInfoEXT(
|
||
|
|
globalstate, (VkDebugMarkerMarkerInfoEXT*)(pMarkerInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdDebugMarkerBeginEXT((VkCommandBuffer)dispatchHandle, pMarkerInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDebugMarkerEndEXT: {
|
||
|
|
android::base::beginTrace("vkCmdDebugMarkerEndEXT subdecode");
|
||
|
|
vk->vkCmdDebugMarkerEndEXT((VkCommandBuffer)dispatchHandle);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDebugMarkerInsertEXT: {
|
||
|
|
android::base::beginTrace("vkCmdDebugMarkerInsertEXT subdecode");
|
||
|
|
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo;
|
||
|
|
VkDebugMarkerMarkerInfoEXT stack_pMarkerInfo[1];
|
||
|
|
pMarkerInfo = (VkDebugMarkerMarkerInfoEXT*)stack_pMarkerInfo;
|
||
|
|
reservedunmarshal_VkDebugMarkerMarkerInfoEXT(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkDebugMarkerMarkerInfoEXT*)(pMarkerInfo), readStreamPtrPtr);
|
||
|
|
if (pMarkerInfo) {
|
||
|
|
transform_tohost_VkDebugMarkerMarkerInfoEXT(
|
||
|
|
globalstate, (VkDebugMarkerMarkerInfoEXT*)(pMarkerInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdDebugMarkerInsertEXT((VkCommandBuffer)dispatchHandle, pMarkerInfo);
|
||
|
|
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 subdecode");
|
||
|
|
uint32_t firstBinding;
|
||
|
|
uint32_t bindingCount;
|
||
|
|
const VkBuffer* pBuffers;
|
||
|
|
VkBuffer stack_pBuffers[MAX_STACK_ITEMS];
|
||
|
|
const VkDeviceSize* pOffsets;
|
||
|
|
VkDeviceSize stack_pOffsets[MAX_STACK_ITEMS];
|
||
|
|
const VkDeviceSize* pSizes;
|
||
|
|
VkDeviceSize stack_pSizes[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&firstBinding, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&bindingCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((bindingCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pBuffers = (VkBuffer*)stack_pBuffers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pBuffers, ((bindingCount)) * sizeof(const VkBuffer));
|
||
|
|
}
|
||
|
|
if (((bindingCount))) {
|
||
|
|
uint8_t* cgen_var_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((bindingCount));
|
||
|
|
for (uint32_t k = 0; k < ((bindingCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_ptr + k * 8, sizeof(uint64_t));
|
||
|
|
*(((VkBuffer*)pBuffers) + k) = (VkBuffer)unbox_VkBuffer((VkBuffer)tmpval);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (((bindingCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pOffsets = (VkDeviceSize*)stack_pOffsets;
|
||
|
|
} else {
|
||
|
|
readStream->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) {
|
||
|
|
if (((bindingCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pSizes = (VkDeviceSize*)stack_pSizes;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pSizes,
|
||
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
||
|
|
}
|
||
|
|
memcpy((VkDeviceSize*)pSizes, *readStreamPtrPtr,
|
||
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += ((bindingCount)) * sizeof(const VkDeviceSize);
|
||
|
|
}
|
||
|
|
vk->vkCmdBindTransformFeedbackBuffersEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
firstBinding, bindingCount, pBuffers,
|
||
|
|
pOffsets, pSizes);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBeginTransformFeedbackEXT: {
|
||
|
|
android::base::beginTrace("vkCmdBeginTransformFeedbackEXT subdecode");
|
||
|
|
uint32_t firstCounterBuffer;
|
||
|
|
uint32_t counterBufferCount;
|
||
|
|
const VkBuffer* pCounterBuffers;
|
||
|
|
VkBuffer stack_pCounterBuffers[MAX_STACK_ITEMS];
|
||
|
|
const VkDeviceSize* pCounterBufferOffsets;
|
||
|
|
VkDeviceSize stack_pCounterBufferOffsets[MAX_STACK_ITEMS];
|
||
|
|
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) {
|
||
|
|
if (((counterBufferCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pCounterBuffers = (VkBuffer*)stack_pCounterBuffers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pCounterBuffers,
|
||
|
|
((counterBufferCount)) * sizeof(const VkBuffer));
|
||
|
|
}
|
||
|
|
if (((counterBufferCount))) {
|
||
|
|
uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((counterBufferCount));
|
||
|
|
for (uint32_t k = 0; k < ((counterBufferCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_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) {
|
||
|
|
if (((counterBufferCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pCounterBufferOffsets = (VkDeviceSize*)stack_pCounterBufferOffsets;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pCounterBufferOffsets,
|
||
|
|
((counterBufferCount)) * sizeof(const VkDeviceSize));
|
||
|
|
}
|
||
|
|
memcpy((VkDeviceSize*)pCounterBufferOffsets, *readStreamPtrPtr,
|
||
|
|
((counterBufferCount)) * sizeof(const VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += ((counterBufferCount)) * sizeof(const VkDeviceSize);
|
||
|
|
}
|
||
|
|
vk->vkCmdBeginTransformFeedbackEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
firstCounterBuffer, counterBufferCount,
|
||
|
|
pCounterBuffers, pCounterBufferOffsets);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndTransformFeedbackEXT: {
|
||
|
|
android::base::beginTrace("vkCmdEndTransformFeedbackEXT subdecode");
|
||
|
|
uint32_t firstCounterBuffer;
|
||
|
|
uint32_t counterBufferCount;
|
||
|
|
const VkBuffer* pCounterBuffers;
|
||
|
|
VkBuffer stack_pCounterBuffers[MAX_STACK_ITEMS];
|
||
|
|
const VkDeviceSize* pCounterBufferOffsets;
|
||
|
|
VkDeviceSize stack_pCounterBufferOffsets[MAX_STACK_ITEMS];
|
||
|
|
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) {
|
||
|
|
if (((counterBufferCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pCounterBuffers = (VkBuffer*)stack_pCounterBuffers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pCounterBuffers,
|
||
|
|
((counterBufferCount)) * sizeof(const VkBuffer));
|
||
|
|
}
|
||
|
|
if (((counterBufferCount))) {
|
||
|
|
uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((counterBufferCount));
|
||
|
|
for (uint32_t k = 0; k < ((counterBufferCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_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) {
|
||
|
|
if (((counterBufferCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pCounterBufferOffsets = (VkDeviceSize*)stack_pCounterBufferOffsets;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pCounterBufferOffsets,
|
||
|
|
((counterBufferCount)) * sizeof(const VkDeviceSize));
|
||
|
|
}
|
||
|
|
memcpy((VkDeviceSize*)pCounterBufferOffsets, *readStreamPtrPtr,
|
||
|
|
((counterBufferCount)) * sizeof(const VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += ((counterBufferCount)) * sizeof(const VkDeviceSize);
|
||
|
|
}
|
||
|
|
vk->vkCmdEndTransformFeedbackEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
firstCounterBuffer, counterBufferCount,
|
||
|
|
pCounterBuffers, pCounterBufferOffsets);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBeginQueryIndexedEXT: {
|
||
|
|
android::base::beginTrace("vkCmdBeginQueryIndexedEXT subdecode");
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t query;
|
||
|
|
VkQueryControlFlags flags;
|
||
|
|
uint32_t index;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkQueryPool*)&queryPool =
|
||
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_0));
|
||
|
|
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);
|
||
|
|
vk->vkCmdBeginQueryIndexedEXT((VkCommandBuffer)dispatchHandle, queryPool, query,
|
||
|
|
flags, index);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndQueryIndexedEXT: {
|
||
|
|
android::base::beginTrace("vkCmdEndQueryIndexedEXT subdecode");
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t query;
|
||
|
|
uint32_t index;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkQueryPool*)&queryPool =
|
||
|
|
(VkQueryPool)unbox_VkQueryPool((VkQueryPool)(*&cgen_var_0));
|
||
|
|
memcpy((uint32_t*)&query, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&index, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdEndQueryIndexedEXT((VkCommandBuffer)dispatchHandle, queryPool, query,
|
||
|
|
index);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawIndirectByteCountEXT: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndirectByteCountEXT subdecode");
|
||
|
|
uint32_t instanceCount;
|
||
|
|
uint32_t firstInstance;
|
||
|
|
VkBuffer counterBuffer;
|
||
|
|
VkDeviceSize counterBufferOffset;
|
||
|
|
uint32_t counterOffset;
|
||
|
|
uint32_t vertexStride;
|
||
|
|
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_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&counterBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndirectByteCountEXT((VkCommandBuffer)dispatchHandle, instanceCount,
|
||
|
|
firstInstance, counterBuffer, counterBufferOffset,
|
||
|
|
counterOffset, vertexStride);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NVX_binary_import
|
||
|
|
case OP_vkCmdCuLaunchKernelNVX: {
|
||
|
|
android::base::beginTrace("vkCmdCuLaunchKernelNVX subdecode");
|
||
|
|
const VkCuLaunchInfoNVX* pLaunchInfo;
|
||
|
|
VkCuLaunchInfoNVX stack_pLaunchInfo[1];
|
||
|
|
pLaunchInfo = (VkCuLaunchInfoNVX*)stack_pLaunchInfo;
|
||
|
|
reservedunmarshal_VkCuLaunchInfoNVX(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCuLaunchInfoNVX*)(pLaunchInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pLaunchInfo) {
|
||
|
|
transform_tohost_VkCuLaunchInfoNVX(globalstate,
|
||
|
|
(VkCuLaunchInfoNVX*)(pLaunchInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdCuLaunchKernelNVX((VkCommandBuffer)dispatchHandle, pLaunchInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NVX_image_view_handle
|
||
|
|
#endif
|
||
|
|
#ifdef VK_AMD_draw_indirect_count
|
||
|
|
case OP_vkCmdDrawIndirectCountAMD: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndirectCountAMD subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
VkBuffer countBuffer;
|
||
|
|
VkDeviceSize countBufferOffset;
|
||
|
|
uint32_t maxDrawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndirectCountAMD((VkCommandBuffer)dispatchHandle, buffer, offset,
|
||
|
|
countBuffer, countBufferOffset, maxDrawCount, stride);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawIndexedIndirectCountAMD: {
|
||
|
|
android::base::beginTrace("vkCmdDrawIndexedIndirectCountAMD subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
VkBuffer countBuffer;
|
||
|
|
VkDeviceSize countBufferOffset;
|
||
|
|
uint32_t maxDrawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawIndexedIndirectCountAMD((VkCommandBuffer)dispatchHandle, buffer,
|
||
|
|
offset, countBuffer, countBufferOffset,
|
||
|
|
maxDrawCount, stride);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_AMD_shader_image_load_store_lod
|
||
|
|
#endif
|
||
|
|
#ifdef VK_GGP_stream_descriptor_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_corner_sampled_image
|
||
|
|
#endif
|
||
|
|
#ifdef VK_IMG_format_pvrtc
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_external_memory_capabilities
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_external_memory
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_external_memory_win32
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_win32_keyed_mutex
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_validation_flags
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NN_vi_surface
|
||
|
|
#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 subdecode");
|
||
|
|
const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin;
|
||
|
|
VkConditionalRenderingBeginInfoEXT stack_pConditionalRenderingBegin[1];
|
||
|
|
pConditionalRenderingBegin =
|
||
|
|
(VkConditionalRenderingBeginInfoEXT*)stack_pConditionalRenderingBegin;
|
||
|
|
reservedunmarshal_VkConditionalRenderingBeginInfoEXT(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkConditionalRenderingBeginInfoEXT*)(pConditionalRenderingBegin),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pConditionalRenderingBegin) {
|
||
|
|
transform_tohost_VkConditionalRenderingBeginInfoEXT(
|
||
|
|
globalstate,
|
||
|
|
(VkConditionalRenderingBeginInfoEXT*)(pConditionalRenderingBegin));
|
||
|
|
}
|
||
|
|
vk->vkCmdBeginConditionalRenderingEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
pConditionalRenderingBegin);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndConditionalRenderingEXT: {
|
||
|
|
android::base::beginTrace("vkCmdEndConditionalRenderingEXT subdecode");
|
||
|
|
vk->vkCmdEndConditionalRenderingEXT((VkCommandBuffer)dispatchHandle);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_clip_space_w_scaling
|
||
|
|
case OP_vkCmdSetViewportWScalingNV: {
|
||
|
|
android::base::beginTrace("vkCmdSetViewportWScalingNV subdecode");
|
||
|
|
uint32_t firstViewport;
|
||
|
|
uint32_t viewportCount;
|
||
|
|
const VkViewportWScalingNV* pViewportWScalings;
|
||
|
|
VkViewportWScalingNV stack_pViewportWScalings[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&firstViewport, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&viewportCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((viewportCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pViewportWScalings = (VkViewportWScalingNV*)stack_pViewportWScalings;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pViewportWScalings,
|
||
|
|
((viewportCount)) * sizeof(const VkViewportWScalingNV));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
||
|
|
reservedunmarshal_VkViewportWScalingNV(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkViewportWScalingNV*)(pViewportWScalings + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pViewportWScalings) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
||
|
|
transform_tohost_VkViewportWScalingNV(
|
||
|
|
globalstate, (VkViewportWScalingNV*)(pViewportWScalings + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetViewportWScalingNV((VkCommandBuffer)dispatchHandle, firstViewport,
|
||
|
|
viewportCount, pViewportWScalings);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_direct_mode_display
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_acquire_xlib_display
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_display_surface_counter
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_display_control
|
||
|
|
#endif
|
||
|
|
#ifdef VK_GOOGLE_display_timing
|
||
|
|
#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 subdecode");
|
||
|
|
uint32_t firstDiscardRectangle;
|
||
|
|
uint32_t discardRectangleCount;
|
||
|
|
const VkRect2D* pDiscardRectangles;
|
||
|
|
VkRect2D stack_pDiscardRectangles[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&firstDiscardRectangle, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&discardRectangleCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((discardRectangleCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pDiscardRectangles = (VkRect2D*)stack_pDiscardRectangles;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pDiscardRectangles,
|
||
|
|
((discardRectangleCount)) * sizeof(const VkRect2D));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i) {
|
||
|
|
reservedunmarshal_VkRect2D(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkRect2D*)(pDiscardRectangles + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pDiscardRectangles) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i) {
|
||
|
|
transform_tohost_VkRect2D(globalstate, (VkRect2D*)(pDiscardRectangles + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetDiscardRectangleEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
firstDiscardRectangle, discardRectangleCount,
|
||
|
|
pDiscardRectangles);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_MVK_ios_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_MVK_macos_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_MVK_moltenvk
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_external_memory_dma_buf
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_queue_family_foreign
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_debug_utils
|
||
|
|
case OP_vkCmdBeginDebugUtilsLabelEXT: {
|
||
|
|
android::base::beginTrace("vkCmdBeginDebugUtilsLabelEXT subdecode");
|
||
|
|
const VkDebugUtilsLabelEXT* pLabelInfo;
|
||
|
|
VkDebugUtilsLabelEXT stack_pLabelInfo[1];
|
||
|
|
pLabelInfo = (VkDebugUtilsLabelEXT*)stack_pLabelInfo;
|
||
|
|
reservedunmarshal_VkDebugUtilsLabelEXT(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pLabelInfo) {
|
||
|
|
transform_tohost_VkDebugUtilsLabelEXT(globalstate,
|
||
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdBeginDebugUtilsLabelEXT((VkCommandBuffer)dispatchHandle, pLabelInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdEndDebugUtilsLabelEXT: {
|
||
|
|
android::base::beginTrace("vkCmdEndDebugUtilsLabelEXT subdecode");
|
||
|
|
vk->vkCmdEndDebugUtilsLabelEXT((VkCommandBuffer)dispatchHandle);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdInsertDebugUtilsLabelEXT: {
|
||
|
|
android::base::beginTrace("vkCmdInsertDebugUtilsLabelEXT subdecode");
|
||
|
|
const VkDebugUtilsLabelEXT* pLabelInfo;
|
||
|
|
VkDebugUtilsLabelEXT stack_pLabelInfo[1];
|
||
|
|
pLabelInfo = (VkDebugUtilsLabelEXT*)stack_pLabelInfo;
|
||
|
|
reservedunmarshal_VkDebugUtilsLabelEXT(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pLabelInfo) {
|
||
|
|
transform_tohost_VkDebugUtilsLabelEXT(globalstate,
|
||
|
|
(VkDebugUtilsLabelEXT*)(pLabelInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdInsertDebugUtilsLabelEXT((VkCommandBuffer)dispatchHandle, pLabelInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_ANDROID_external_memory_android_hardware_buffer
|
||
|
|
#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 subdecode");
|
||
|
|
const VkSampleLocationsInfoEXT* pSampleLocationsInfo;
|
||
|
|
VkSampleLocationsInfoEXT stack_pSampleLocationsInfo[1];
|
||
|
|
pSampleLocationsInfo = (VkSampleLocationsInfoEXT*)stack_pSampleLocationsInfo;
|
||
|
|
reservedunmarshal_VkSampleLocationsInfoEXT(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkSampleLocationsInfoEXT*)(pSampleLocationsInfo), readStreamPtrPtr);
|
||
|
|
if (pSampleLocationsInfo) {
|
||
|
|
transform_tohost_VkSampleLocationsInfoEXT(
|
||
|
|
globalstate, (VkSampleLocationsInfoEXT*)(pSampleLocationsInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdSetSampleLocationsEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
pSampleLocationsInfo);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_validation_cache
|
||
|
|
#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 subdecode");
|
||
|
|
VkImageView imageView;
|
||
|
|
VkImageLayout imageLayout;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImageView*)&imageView =
|
||
|
|
(VkImageView)unbox_VkImageView((VkImageView)(*&cgen_var_0));
|
||
|
|
memcpy((VkImageLayout*)&imageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
vk->vkCmdBindShadingRateImageNV((VkCommandBuffer)dispatchHandle, imageView,
|
||
|
|
imageLayout);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetViewportShadingRatePaletteNV: {
|
||
|
|
android::base::beginTrace("vkCmdSetViewportShadingRatePaletteNV subdecode");
|
||
|
|
uint32_t firstViewport;
|
||
|
|
uint32_t viewportCount;
|
||
|
|
const VkShadingRatePaletteNV* pShadingRatePalettes;
|
||
|
|
VkShadingRatePaletteNV stack_pShadingRatePalettes[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&firstViewport, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&viewportCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((viewportCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pShadingRatePalettes = (VkShadingRatePaletteNV*)stack_pShadingRatePalettes;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pShadingRatePalettes,
|
||
|
|
((viewportCount)) * sizeof(const VkShadingRatePaletteNV));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
||
|
|
reservedunmarshal_VkShadingRatePaletteNV(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkShadingRatePaletteNV*)(pShadingRatePalettes + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pShadingRatePalettes) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
||
|
|
transform_tohost_VkShadingRatePaletteNV(
|
||
|
|
globalstate, (VkShadingRatePaletteNV*)(pShadingRatePalettes + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetViewportShadingRatePaletteNV((VkCommandBuffer)dispatchHandle,
|
||
|
|
firstViewport, viewportCount,
|
||
|
|
pShadingRatePalettes);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetCoarseSampleOrderNV: {
|
||
|
|
android::base::beginTrace("vkCmdSetCoarseSampleOrderNV subdecode");
|
||
|
|
VkCoarseSampleOrderTypeNV sampleOrderType;
|
||
|
|
uint32_t customSampleOrderCount;
|
||
|
|
const VkCoarseSampleOrderCustomNV* pCustomSampleOrders;
|
||
|
|
VkCoarseSampleOrderCustomNV stack_pCustomSampleOrders[MAX_STACK_ITEMS];
|
||
|
|
memcpy((VkCoarseSampleOrderTypeNV*)&sampleOrderType, *readStreamPtrPtr,
|
||
|
|
sizeof(VkCoarseSampleOrderTypeNV));
|
||
|
|
*readStreamPtrPtr += sizeof(VkCoarseSampleOrderTypeNV);
|
||
|
|
memcpy((uint32_t*)&customSampleOrderCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((customSampleOrderCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pCustomSampleOrders = (VkCoarseSampleOrderCustomNV*)stack_pCustomSampleOrders;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pCustomSampleOrders,
|
||
|
|
((customSampleOrderCount)) * sizeof(const VkCoarseSampleOrderCustomNV));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((customSampleOrderCount)); ++i) {
|
||
|
|
reservedunmarshal_VkCoarseSampleOrderCustomNV(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCoarseSampleOrderCustomNV*)(pCustomSampleOrders + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pCustomSampleOrders) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((customSampleOrderCount)); ++i) {
|
||
|
|
transform_tohost_VkCoarseSampleOrderCustomNV(
|
||
|
|
globalstate, (VkCoarseSampleOrderCustomNV*)(pCustomSampleOrders + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetCoarseSampleOrderNV((VkCommandBuffer)dispatchHandle, sampleOrderType,
|
||
|
|
customSampleOrderCount, pCustomSampleOrders);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_ray_tracing
|
||
|
|
case OP_vkCmdBuildAccelerationStructureNV: {
|
||
|
|
android::base::beginTrace("vkCmdBuildAccelerationStructureNV subdecode");
|
||
|
|
const VkAccelerationStructureInfoNV* pInfo;
|
||
|
|
VkAccelerationStructureInfoNV stack_pInfo[1];
|
||
|
|
VkBuffer instanceData;
|
||
|
|
VkDeviceSize instanceOffset;
|
||
|
|
VkBool32 update;
|
||
|
|
VkAccelerationStructureNV dst;
|
||
|
|
VkAccelerationStructureNV src;
|
||
|
|
VkBuffer scratch;
|
||
|
|
VkDeviceSize scratchOffset;
|
||
|
|
pInfo = (VkAccelerationStructureInfoNV*)stack_pInfo;
|
||
|
|
reservedunmarshal_VkAccelerationStructureInfoNV(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureInfoNV*)(pInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&instanceData = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
||
|
|
memcpy((VkDeviceSize*)&instanceOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
memcpy((VkBool32*)&update, *readStreamPtrPtr, sizeof(VkBool32));
|
||
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
||
|
|
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));
|
||
|
|
uint64_t cgen_var_3;
|
||
|
|
memcpy((uint64_t*)&cgen_var_3, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&scratch = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_3));
|
||
|
|
memcpy((VkDeviceSize*)&scratchOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
if (pInfo) {
|
||
|
|
transform_tohost_VkAccelerationStructureInfoNV(
|
||
|
|
globalstate, (VkAccelerationStructureInfoNV*)(pInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdBuildAccelerationStructureNV((VkCommandBuffer)dispatchHandle, pInfo,
|
||
|
|
instanceData, instanceOffset, update, dst,
|
||
|
|
src, scratch, scratchOffset);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyAccelerationStructureNV: {
|
||
|
|
android::base::beginTrace("vkCmdCopyAccelerationStructureNV subdecode");
|
||
|
|
VkAccelerationStructureNV dst;
|
||
|
|
VkAccelerationStructureNV src;
|
||
|
|
VkCopyAccelerationStructureModeKHR mode;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkAccelerationStructureNV*)&dst =
|
||
|
|
(VkAccelerationStructureNV)unbox_VkAccelerationStructureNV(
|
||
|
|
(VkAccelerationStructureNV)(*&cgen_var_0));
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkAccelerationStructureNV*)&src =
|
||
|
|
(VkAccelerationStructureNV)unbox_VkAccelerationStructureNV(
|
||
|
|
(VkAccelerationStructureNV)(*&cgen_var_1));
|
||
|
|
memcpy((VkCopyAccelerationStructureModeKHR*)&mode, *readStreamPtrPtr,
|
||
|
|
sizeof(VkCopyAccelerationStructureModeKHR));
|
||
|
|
*readStreamPtrPtr += sizeof(VkCopyAccelerationStructureModeKHR);
|
||
|
|
vk->vkCmdCopyAccelerationStructureNV((VkCommandBuffer)dispatchHandle, dst, src,
|
||
|
|
mode);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdTraceRaysNV: {
|
||
|
|
android::base::beginTrace("vkCmdTraceRaysNV subdecode");
|
||
|
|
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;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&raygenShaderBindingTableBuffer =
|
||
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
||
|
|
memcpy((VkDeviceSize*)&raygenShaderBindingOffset, *readStreamPtrPtr,
|
||
|
|
sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&missShaderBindingTableBuffer =
|
||
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
||
|
|
memcpy((VkDeviceSize*)&missShaderBindingOffset, *readStreamPtrPtr,
|
||
|
|
sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
memcpy((VkDeviceSize*)&missShaderBindingStride, *readStreamPtrPtr,
|
||
|
|
sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_2;
|
||
|
|
memcpy((uint64_t*)&cgen_var_2, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&hitShaderBindingTableBuffer =
|
||
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_2));
|
||
|
|
memcpy((VkDeviceSize*)&hitShaderBindingOffset, *readStreamPtrPtr,
|
||
|
|
sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
memcpy((VkDeviceSize*)&hitShaderBindingStride, *readStreamPtrPtr,
|
||
|
|
sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_3;
|
||
|
|
memcpy((uint64_t*)&cgen_var_3, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&callableShaderBindingTableBuffer =
|
||
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_3));
|
||
|
|
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);
|
||
|
|
vk->vkCmdTraceRaysNV((VkCommandBuffer)dispatchHandle,
|
||
|
|
raygenShaderBindingTableBuffer, raygenShaderBindingOffset,
|
||
|
|
missShaderBindingTableBuffer, missShaderBindingOffset,
|
||
|
|
missShaderBindingStride, hitShaderBindingTableBuffer,
|
||
|
|
hitShaderBindingOffset, hitShaderBindingStride,
|
||
|
|
callableShaderBindingTableBuffer, callableShaderBindingOffset,
|
||
|
|
callableShaderBindingStride, width, height, depth);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdWriteAccelerationStructuresPropertiesNV: {
|
||
|
|
android::base::beginTrace("vkCmdWriteAccelerationStructuresPropertiesNV subdecode");
|
||
|
|
uint32_t accelerationStructureCount;
|
||
|
|
const VkAccelerationStructureNV* pAccelerationStructures;
|
||
|
|
VkAccelerationStructureNV stack_pAccelerationStructures[MAX_STACK_ITEMS];
|
||
|
|
VkQueryType queryType;
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t firstQuery;
|
||
|
|
memcpy((uint32_t*)&accelerationStructureCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((accelerationStructureCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pAccelerationStructures =
|
||
|
|
(VkAccelerationStructureNV*)stack_pAccelerationStructures;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pAccelerationStructures,
|
||
|
|
((accelerationStructureCount)) * sizeof(const VkAccelerationStructureNV));
|
||
|
|
}
|
||
|
|
if (((accelerationStructureCount))) {
|
||
|
|
uint8_t* cgen_var_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((accelerationStructureCount));
|
||
|
|
for (uint32_t k = 0; k < ((accelerationStructureCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_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_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);
|
||
|
|
vk->vkCmdWriteAccelerationStructuresPropertiesNV(
|
||
|
|
(VkCommandBuffer)dispatchHandle, accelerationStructureCount,
|
||
|
|
pAccelerationStructures, queryType, queryPool, firstQuery);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_AMD_buffer_marker
|
||
|
|
case OP_vkCmdWriteBufferMarkerAMD: {
|
||
|
|
android::base::beginTrace("vkCmdWriteBufferMarkerAMD subdecode");
|
||
|
|
VkPipelineStageFlagBits pipelineStage;
|
||
|
|
VkBuffer dstBuffer;
|
||
|
|
VkDeviceSize dstOffset;
|
||
|
|
uint32_t marker;
|
||
|
|
memcpy((VkPipelineStageFlagBits*)&pipelineStage, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineStageFlagBits));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineStageFlagBits);
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&dstBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
|
||
|
|
memcpy((VkDeviceSize*)&dstOffset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
memcpy((uint32_t*)&marker, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdWriteBufferMarkerAMD((VkCommandBuffer)dispatchHandle, pipelineStage,
|
||
|
|
dstBuffer, dstOffset, marker);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_AMD_pipeline_compiler_control
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_calibrated_timestamps
|
||
|
|
#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 subdecode");
|
||
|
|
uint32_t taskCount;
|
||
|
|
uint32_t firstTask;
|
||
|
|
memcpy((uint32_t*)&taskCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&firstTask, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdDrawMeshTasksNV((VkCommandBuffer)dispatchHandle, taskCount, firstTask);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawMeshTasksIndirectNV: {
|
||
|
|
android::base::beginTrace("vkCmdDrawMeshTasksIndirectNV subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
uint32_t drawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawMeshTasksIndirectNV((VkCommandBuffer)dispatchHandle, buffer, offset,
|
||
|
|
drawCount, stride);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawMeshTasksIndirectCountNV: {
|
||
|
|
android::base::beginTrace("vkCmdDrawMeshTasksIndirectCountNV subdecode");
|
||
|
|
VkBuffer buffer;
|
||
|
|
VkDeviceSize offset;
|
||
|
|
VkBuffer countBuffer;
|
||
|
|
VkDeviceSize countBufferOffset;
|
||
|
|
uint32_t maxDrawCount;
|
||
|
|
uint32_t stride;
|
||
|
|
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));
|
||
|
|
memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceSize);
|
||
|
|
uint64_t cgen_var_1;
|
||
|
|
memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkBuffer*)&countBuffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
|
||
|
|
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);
|
||
|
|
vk->vkCmdDrawMeshTasksIndirectCountNV((VkCommandBuffer)dispatchHandle, buffer,
|
||
|
|
offset, countBuffer, countBufferOffset,
|
||
|
|
maxDrawCount, stride);
|
||
|
|
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 subdecode");
|
||
|
|
uint32_t firstExclusiveScissor;
|
||
|
|
uint32_t exclusiveScissorCount;
|
||
|
|
const VkRect2D* pExclusiveScissors;
|
||
|
|
VkRect2D stack_pExclusiveScissors[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&firstExclusiveScissor, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&exclusiveScissorCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((exclusiveScissorCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pExclusiveScissors = (VkRect2D*)stack_pExclusiveScissors;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pExclusiveScissors,
|
||
|
|
((exclusiveScissorCount)) * sizeof(const VkRect2D));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((exclusiveScissorCount)); ++i) {
|
||
|
|
reservedunmarshal_VkRect2D(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkRect2D*)(pExclusiveScissors + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pExclusiveScissors) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((exclusiveScissorCount)); ++i) {
|
||
|
|
transform_tohost_VkRect2D(globalstate, (VkRect2D*)(pExclusiveScissors + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetExclusiveScissorNV((VkCommandBuffer)dispatchHandle,
|
||
|
|
firstExclusiveScissor, exclusiveScissorCount,
|
||
|
|
pExclusiveScissors);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_device_diagnostic_checkpoints
|
||
|
|
case OP_vkCmdSetCheckpointNV: {
|
||
|
|
android::base::beginTrace("vkCmdSetCheckpointNV subdecode");
|
||
|
|
const void* pCheckpointMarker;
|
||
|
|
uint8_t* stack_pCheckpointMarker[1];
|
||
|
|
// WARNING PTR CHECK
|
||
|
|
memcpy((void**)&pCheckpointMarker, (*readStreamPtrPtr), 8);
|
||
|
|
android::base::Stream::fromBe64((uint8_t*)&pCheckpointMarker);
|
||
|
|
*readStreamPtrPtr += 8;
|
||
|
|
if (pCheckpointMarker) {
|
||
|
|
pCheckpointMarker = (void*)stack_pCheckpointMarker;
|
||
|
|
memcpy((void*)pCheckpointMarker, *readStreamPtrPtr, sizeof(const uint8_t));
|
||
|
|
*readStreamPtrPtr += sizeof(const uint8_t);
|
||
|
|
}
|
||
|
|
vk->vkCmdSetCheckpointNV((VkCommandBuffer)dispatchHandle, pCheckpointMarker);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_INTEL_shader_integer_functions2
|
||
|
|
#endif
|
||
|
|
#ifdef VK_INTEL_performance_query
|
||
|
|
case OP_vkCmdSetPerformanceMarkerINTEL: {
|
||
|
|
android::base::beginTrace("vkCmdSetPerformanceMarkerINTEL subdecode");
|
||
|
|
const VkPerformanceMarkerInfoINTEL* pMarkerInfo;
|
||
|
|
VkPerformanceMarkerInfoINTEL stack_pMarkerInfo[1];
|
||
|
|
pMarkerInfo = (VkPerformanceMarkerInfoINTEL*)stack_pMarkerInfo;
|
||
|
|
reservedunmarshal_VkPerformanceMarkerInfoINTEL(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkPerformanceMarkerInfoINTEL*)(pMarkerInfo), readStreamPtrPtr);
|
||
|
|
if (pMarkerInfo) {
|
||
|
|
transform_tohost_VkPerformanceMarkerInfoINTEL(
|
||
|
|
globalstate, (VkPerformanceMarkerInfoINTEL*)(pMarkerInfo));
|
||
|
|
}
|
||
|
|
VkResult vkCmdSetPerformanceMarkerINTEL_VkResult_return = (VkResult)0;
|
||
|
|
vkCmdSetPerformanceMarkerINTEL_VkResult_return = vk->vkCmdSetPerformanceMarkerINTEL(
|
||
|
|
(VkCommandBuffer)dispatchHandle, pMarkerInfo);
|
||
|
|
if ((vkCmdSetPerformanceMarkerINTEL_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
||
|
|
this->on_DeviceLost();
|
||
|
|
this->on_CheckOutOfMemory(vkCmdSetPerformanceMarkerINTEL_VkResult_return, opcode,
|
||
|
|
context);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetPerformanceStreamMarkerINTEL: {
|
||
|
|
android::base::beginTrace("vkCmdSetPerformanceStreamMarkerINTEL subdecode");
|
||
|
|
const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo;
|
||
|
|
VkPerformanceStreamMarkerInfoINTEL stack_pMarkerInfo[1];
|
||
|
|
pMarkerInfo = (VkPerformanceStreamMarkerInfoINTEL*)stack_pMarkerInfo;
|
||
|
|
reservedunmarshal_VkPerformanceStreamMarkerInfoINTEL(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkPerformanceStreamMarkerInfoINTEL*)(pMarkerInfo), readStreamPtrPtr);
|
||
|
|
if (pMarkerInfo) {
|
||
|
|
transform_tohost_VkPerformanceStreamMarkerInfoINTEL(
|
||
|
|
globalstate, (VkPerformanceStreamMarkerInfoINTEL*)(pMarkerInfo));
|
||
|
|
}
|
||
|
|
VkResult vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return = (VkResult)0;
|
||
|
|
vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return =
|
||
|
|
vk->vkCmdSetPerformanceStreamMarkerINTEL((VkCommandBuffer)dispatchHandle,
|
||
|
|
pMarkerInfo);
|
||
|
|
if ((vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
||
|
|
this->on_DeviceLost();
|
||
|
|
this->on_CheckOutOfMemory(vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return,
|
||
|
|
opcode, context);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetPerformanceOverrideINTEL: {
|
||
|
|
android::base::beginTrace("vkCmdSetPerformanceOverrideINTEL subdecode");
|
||
|
|
const VkPerformanceOverrideInfoINTEL* pOverrideInfo;
|
||
|
|
VkPerformanceOverrideInfoINTEL stack_pOverrideInfo[1];
|
||
|
|
pOverrideInfo = (VkPerformanceOverrideInfoINTEL*)stack_pOverrideInfo;
|
||
|
|
reservedunmarshal_VkPerformanceOverrideInfoINTEL(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkPerformanceOverrideInfoINTEL*)(pOverrideInfo), readStreamPtrPtr);
|
||
|
|
if (pOverrideInfo) {
|
||
|
|
transform_tohost_VkPerformanceOverrideInfoINTEL(
|
||
|
|
globalstate, (VkPerformanceOverrideInfoINTEL*)(pOverrideInfo));
|
||
|
|
}
|
||
|
|
VkResult vkCmdSetPerformanceOverrideINTEL_VkResult_return = (VkResult)0;
|
||
|
|
vkCmdSetPerformanceOverrideINTEL_VkResult_return =
|
||
|
|
vk->vkCmdSetPerformanceOverrideINTEL((VkCommandBuffer)dispatchHandle,
|
||
|
|
pOverrideInfo);
|
||
|
|
if ((vkCmdSetPerformanceOverrideINTEL_VkResult_return) == VK_ERROR_DEVICE_LOST)
|
||
|
|
this->on_DeviceLost();
|
||
|
|
this->on_CheckOutOfMemory(vkCmdSetPerformanceOverrideINTEL_VkResult_return, opcode,
|
||
|
|
context);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_pci_bus_info
|
||
|
|
#endif
|
||
|
|
#ifdef VK_AMD_display_native_hdr
|
||
|
|
#endif
|
||
|
|
#ifdef VK_FUCHSIA_imagepipe_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_metal_surface
|
||
|
|
#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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_tooling_info
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_separate_stencil_usage
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_validation_features
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_cooperative_matrix
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_coverage_reduction_mode
|
||
|
|
#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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_headless_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_line_rasterization
|
||
|
|
case OP_vkCmdSetLineStippleEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetLineStippleEXT subdecode");
|
||
|
|
uint32_t lineStippleFactor;
|
||
|
|
uint16_t lineStipplePattern;
|
||
|
|
memcpy((uint32_t*)&lineStippleFactor, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint16_t*)&lineStipplePattern, *readStreamPtrPtr, sizeof(uint16_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint16_t);
|
||
|
|
vk->vkCmdSetLineStippleEXT((VkCommandBuffer)dispatchHandle, lineStippleFactor,
|
||
|
|
lineStipplePattern);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_shader_atomic_float
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_host_query_reset
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_index_type_uint8
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_extended_dynamic_state
|
||
|
|
case OP_vkCmdSetCullModeEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetCullModeEXT subdecode");
|
||
|
|
VkCullModeFlags cullMode;
|
||
|
|
memcpy((VkCullModeFlags*)&cullMode, *readStreamPtrPtr, sizeof(VkCullModeFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkCullModeFlags);
|
||
|
|
vk->vkCmdSetCullModeEXT((VkCommandBuffer)dispatchHandle, cullMode);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetFrontFaceEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetFrontFaceEXT subdecode");
|
||
|
|
VkFrontFace frontFace;
|
||
|
|
memcpy((VkFrontFace*)&frontFace, *readStreamPtrPtr, sizeof(VkFrontFace));
|
||
|
|
*readStreamPtrPtr += sizeof(VkFrontFace);
|
||
|
|
vk->vkCmdSetFrontFaceEXT((VkCommandBuffer)dispatchHandle, frontFace);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetPrimitiveTopologyEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetPrimitiveTopologyEXT subdecode");
|
||
|
|
VkPrimitiveTopology primitiveTopology;
|
||
|
|
memcpy((VkPrimitiveTopology*)&primitiveTopology, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPrimitiveTopology));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPrimitiveTopology);
|
||
|
|
vk->vkCmdSetPrimitiveTopologyEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
primitiveTopology);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetViewportWithCountEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetViewportWithCountEXT subdecode");
|
||
|
|
uint32_t viewportCount;
|
||
|
|
const VkViewport* pViewports;
|
||
|
|
VkViewport stack_pViewports[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&viewportCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((viewportCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pViewports = (VkViewport*)stack_pViewports;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pViewports,
|
||
|
|
((viewportCount)) * sizeof(const VkViewport));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
||
|
|
reservedunmarshal_VkViewport(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkViewport*)(pViewports + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pViewports) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
|
||
|
|
transform_tohost_VkViewport(globalstate, (VkViewport*)(pViewports + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetViewportWithCountEXT((VkCommandBuffer)dispatchHandle, viewportCount,
|
||
|
|
pViewports);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetScissorWithCountEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetScissorWithCountEXT subdecode");
|
||
|
|
uint32_t scissorCount;
|
||
|
|
const VkRect2D* pScissors;
|
||
|
|
VkRect2D stack_pScissors[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&scissorCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((scissorCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pScissors = (VkRect2D*)stack_pScissors;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pScissors,
|
||
|
|
((scissorCount)) * sizeof(const VkRect2D));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
|
||
|
|
reservedunmarshal_VkRect2D(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkRect2D*)(pScissors + i), readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pScissors) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
|
||
|
|
transform_tohost_VkRect2D(globalstate, (VkRect2D*)(pScissors + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetScissorWithCountEXT((VkCommandBuffer)dispatchHandle, scissorCount,
|
||
|
|
pScissors);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBindVertexBuffers2EXT: {
|
||
|
|
android::base::beginTrace("vkCmdBindVertexBuffers2EXT subdecode");
|
||
|
|
uint32_t firstBinding;
|
||
|
|
uint32_t bindingCount;
|
||
|
|
const VkBuffer* pBuffers;
|
||
|
|
VkBuffer stack_pBuffers[MAX_STACK_ITEMS];
|
||
|
|
const VkDeviceSize* pOffsets;
|
||
|
|
VkDeviceSize stack_pOffsets[MAX_STACK_ITEMS];
|
||
|
|
const VkDeviceSize* pSizes;
|
||
|
|
VkDeviceSize stack_pSizes[MAX_STACK_ITEMS];
|
||
|
|
const VkDeviceSize* pStrides;
|
||
|
|
VkDeviceSize stack_pStrides[MAX_STACK_ITEMS];
|
||
|
|
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) {
|
||
|
|
if (((bindingCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pBuffers = (VkBuffer*)stack_pBuffers;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pBuffers,
|
||
|
|
((bindingCount)) * sizeof(const VkBuffer));
|
||
|
|
}
|
||
|
|
if (((bindingCount))) {
|
||
|
|
uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((bindingCount));
|
||
|
|
for (uint32_t k = 0; k < ((bindingCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_0_ptr + k * 8, sizeof(uint64_t));
|
||
|
|
*(((VkBuffer*)pBuffers) + k) =
|
||
|
|
(VkBuffer)unbox_VkBuffer((VkBuffer)tmpval);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (((bindingCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pOffsets = (VkDeviceSize*)stack_pOffsets;
|
||
|
|
} else {
|
||
|
|
readStream->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) {
|
||
|
|
if (((bindingCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pSizes = (VkDeviceSize*)stack_pSizes;
|
||
|
|
} else {
|
||
|
|
readStream->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) {
|
||
|
|
if (((bindingCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pStrides = (VkDeviceSize*)stack_pStrides;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pStrides,
|
||
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
||
|
|
}
|
||
|
|
memcpy((VkDeviceSize*)pStrides, *readStreamPtrPtr,
|
||
|
|
((bindingCount)) * sizeof(const VkDeviceSize));
|
||
|
|
*readStreamPtrPtr += ((bindingCount)) * sizeof(const VkDeviceSize);
|
||
|
|
}
|
||
|
|
vk->vkCmdBindVertexBuffers2EXT((VkCommandBuffer)dispatchHandle, firstBinding,
|
||
|
|
bindingCount, pBuffers, pOffsets, pSizes, pStrides);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetDepthTestEnableEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetDepthTestEnableEXT subdecode");
|
||
|
|
VkBool32 depthTestEnable;
|
||
|
|
memcpy((VkBool32*)&depthTestEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
||
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
||
|
|
vk->vkCmdSetDepthTestEnableEXT((VkCommandBuffer)dispatchHandle, depthTestEnable);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetDepthWriteEnableEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetDepthWriteEnableEXT subdecode");
|
||
|
|
VkBool32 depthWriteEnable;
|
||
|
|
memcpy((VkBool32*)&depthWriteEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
||
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
||
|
|
vk->vkCmdSetDepthWriteEnableEXT((VkCommandBuffer)dispatchHandle, depthWriteEnable);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetDepthCompareOpEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetDepthCompareOpEXT subdecode");
|
||
|
|
VkCompareOp depthCompareOp;
|
||
|
|
memcpy((VkCompareOp*)&depthCompareOp, *readStreamPtrPtr, sizeof(VkCompareOp));
|
||
|
|
*readStreamPtrPtr += sizeof(VkCompareOp);
|
||
|
|
vk->vkCmdSetDepthCompareOpEXT((VkCommandBuffer)dispatchHandle, depthCompareOp);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetDepthBoundsTestEnableEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetDepthBoundsTestEnableEXT subdecode");
|
||
|
|
VkBool32 depthBoundsTestEnable;
|
||
|
|
memcpy((VkBool32*)&depthBoundsTestEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
||
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
||
|
|
vk->vkCmdSetDepthBoundsTestEnableEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
depthBoundsTestEnable);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetStencilTestEnableEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetStencilTestEnableEXT subdecode");
|
||
|
|
VkBool32 stencilTestEnable;
|
||
|
|
memcpy((VkBool32*)&stencilTestEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
||
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
||
|
|
vk->vkCmdSetStencilTestEnableEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
stencilTestEnable);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetStencilOpEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetStencilOpEXT subdecode");
|
||
|
|
VkStencilFaceFlags faceMask;
|
||
|
|
VkStencilOp failOp;
|
||
|
|
VkStencilOp passOp;
|
||
|
|
VkStencilOp depthFailOp;
|
||
|
|
VkCompareOp compareOp;
|
||
|
|
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);
|
||
|
|
vk->vkCmdSetStencilOpEXT((VkCommandBuffer)dispatchHandle, faceMask, failOp, passOp,
|
||
|
|
depthFailOp, compareOp);
|
||
|
|
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_vkCmdPreprocessGeneratedCommandsNV: {
|
||
|
|
android::base::beginTrace("vkCmdPreprocessGeneratedCommandsNV subdecode");
|
||
|
|
const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo;
|
||
|
|
VkGeneratedCommandsInfoNV stack_pGeneratedCommandsInfo[1];
|
||
|
|
pGeneratedCommandsInfo = (VkGeneratedCommandsInfoNV*)stack_pGeneratedCommandsInfo;
|
||
|
|
reservedunmarshal_VkGeneratedCommandsInfoNV(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkGeneratedCommandsInfoNV*)(pGeneratedCommandsInfo), readStreamPtrPtr);
|
||
|
|
if (pGeneratedCommandsInfo) {
|
||
|
|
transform_tohost_VkGeneratedCommandsInfoNV(
|
||
|
|
globalstate, (VkGeneratedCommandsInfoNV*)(pGeneratedCommandsInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdPreprocessGeneratedCommandsNV((VkCommandBuffer)dispatchHandle,
|
||
|
|
pGeneratedCommandsInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdExecuteGeneratedCommandsNV: {
|
||
|
|
android::base::beginTrace("vkCmdExecuteGeneratedCommandsNV subdecode");
|
||
|
|
VkBool32 isPreprocessed;
|
||
|
|
const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo;
|
||
|
|
VkGeneratedCommandsInfoNV stack_pGeneratedCommandsInfo[1];
|
||
|
|
memcpy((VkBool32*)&isPreprocessed, *readStreamPtrPtr, sizeof(VkBool32));
|
||
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
||
|
|
pGeneratedCommandsInfo = (VkGeneratedCommandsInfoNV*)stack_pGeneratedCommandsInfo;
|
||
|
|
reservedunmarshal_VkGeneratedCommandsInfoNV(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkGeneratedCommandsInfoNV*)(pGeneratedCommandsInfo), readStreamPtrPtr);
|
||
|
|
if (pGeneratedCommandsInfo) {
|
||
|
|
transform_tohost_VkGeneratedCommandsInfoNV(
|
||
|
|
globalstate, (VkGeneratedCommandsInfoNV*)(pGeneratedCommandsInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdExecuteGeneratedCommandsNV((VkCommandBuffer)dispatchHandle, isPreprocessed,
|
||
|
|
pGeneratedCommandsInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBindPipelineShaderGroupNV: {
|
||
|
|
android::base::beginTrace("vkCmdBindPipelineShaderGroupNV subdecode");
|
||
|
|
VkPipelineBindPoint pipelineBindPoint;
|
||
|
|
VkPipeline pipeline;
|
||
|
|
uint32_t groupIndex;
|
||
|
|
memcpy((VkPipelineBindPoint*)&pipelineBindPoint, *readStreamPtrPtr,
|
||
|
|
sizeof(VkPipelineBindPoint));
|
||
|
|
*readStreamPtrPtr += sizeof(VkPipelineBindPoint);
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkPipeline*)&pipeline = (VkPipeline)unbox_VkPipeline((VkPipeline)(*&cgen_var_0));
|
||
|
|
memcpy((uint32_t*)&groupIndex, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdBindPipelineShaderGroupNV((VkCommandBuffer)dispatchHandle,
|
||
|
|
pipelineBindPoint, pipeline, groupIndex);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_robustness2
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_custom_border_color
|
||
|
|
#endif
|
||
|
|
#ifdef VK_GOOGLE_user_type
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_private_data
|
||
|
|
#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 subdecode");
|
||
|
|
VkFragmentShadingRateNV shadingRate;
|
||
|
|
VkFragmentShadingRateCombinerOpKHR combinerOps[2];
|
||
|
|
memcpy((VkFragmentShadingRateNV*)&shadingRate, *readStreamPtrPtr,
|
||
|
|
sizeof(VkFragmentShadingRateNV));
|
||
|
|
*readStreamPtrPtr += sizeof(VkFragmentShadingRateNV);
|
||
|
|
memcpy((VkFragmentShadingRateCombinerOpKHR*)combinerOps, *readStreamPtrPtr,
|
||
|
|
2 * sizeof(const VkFragmentShadingRateCombinerOpKHR));
|
||
|
|
*readStreamPtrPtr += 2 * sizeof(const VkFragmentShadingRateCombinerOpKHR);
|
||
|
|
vk->vkCmdSetFragmentShadingRateEnumNV((VkCommandBuffer)dispatchHandle, shadingRate,
|
||
|
|
combinerOps);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_directfb_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_VALVE_mutable_descriptor_type
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_vertex_input_dynamic_state
|
||
|
|
case OP_vkCmdSetVertexInputEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetVertexInputEXT subdecode");
|
||
|
|
uint32_t vertexBindingDescriptionCount;
|
||
|
|
const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions;
|
||
|
|
VkVertexInputBindingDescription2EXT
|
||
|
|
stack_pVertexBindingDescriptions[MAX_STACK_ITEMS];
|
||
|
|
uint32_t vertexAttributeDescriptionCount;
|
||
|
|
const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions;
|
||
|
|
VkVertexInputAttributeDescription2EXT
|
||
|
|
stack_pVertexAttributeDescriptions[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&vertexBindingDescriptionCount, *readStreamPtrPtr,
|
||
|
|
sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((vertexBindingDescriptionCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pVertexBindingDescriptions =
|
||
|
|
(VkVertexInputBindingDescription2EXT*)stack_pVertexBindingDescriptions;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pVertexBindingDescriptions,
|
||
|
|
((vertexBindingDescriptionCount)) *
|
||
|
|
sizeof(const VkVertexInputBindingDescription2EXT));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((vertexBindingDescriptionCount)); ++i) {
|
||
|
|
reservedunmarshal_VkVertexInputBindingDescription2EXT(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkVertexInputBindingDescription2EXT*)(pVertexBindingDescriptions + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
memcpy((uint32_t*)&vertexAttributeDescriptionCount, *readStreamPtrPtr,
|
||
|
|
sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((vertexAttributeDescriptionCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pVertexAttributeDescriptions =
|
||
|
|
(VkVertexInputAttributeDescription2EXT*)stack_pVertexAttributeDescriptions;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pVertexAttributeDescriptions,
|
||
|
|
((vertexAttributeDescriptionCount)) *
|
||
|
|
sizeof(const VkVertexInputAttributeDescription2EXT));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((vertexAttributeDescriptionCount)); ++i) {
|
||
|
|
reservedunmarshal_VkVertexInputAttributeDescription2EXT(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkVertexInputAttributeDescription2EXT*)(pVertexAttributeDescriptions + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pVertexBindingDescriptions) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((vertexBindingDescriptionCount)); ++i) {
|
||
|
|
transform_tohost_VkVertexInputBindingDescription2EXT(
|
||
|
|
globalstate,
|
||
|
|
(VkVertexInputBindingDescription2EXT*)(pVertexBindingDescriptions + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (pVertexAttributeDescriptions) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((vertexAttributeDescriptionCount)); ++i) {
|
||
|
|
transform_tohost_VkVertexInputAttributeDescription2EXT(
|
||
|
|
globalstate,
|
||
|
|
(VkVertexInputAttributeDescription2EXT*)(pVertexAttributeDescriptions +
|
||
|
|
i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdSetVertexInputEXT(
|
||
|
|
(VkCommandBuffer)dispatchHandle, vertexBindingDescriptionCount,
|
||
|
|
pVertexBindingDescriptions, vertexAttributeDescriptionCount,
|
||
|
|
pVertexAttributeDescriptions);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_FUCHSIA_external_semaphore
|
||
|
|
#endif
|
||
|
|
#ifdef VK_FUCHSIA_buffer_collection
|
||
|
|
#endif
|
||
|
|
#ifdef VK_HUAWEI_subpass_shading
|
||
|
|
case OP_vkCmdSubpassShadingHUAWEI: {
|
||
|
|
android::base::beginTrace("vkCmdSubpassShadingHUAWEI subdecode");
|
||
|
|
vk->vkCmdSubpassShadingHUAWEI((VkCommandBuffer)dispatchHandle);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_HUAWEI_invocation_mask
|
||
|
|
case OP_vkCmdBindInvocationMaskHUAWEI: {
|
||
|
|
android::base::beginTrace("vkCmdBindInvocationMaskHUAWEI subdecode");
|
||
|
|
VkImageView imageView;
|
||
|
|
VkImageLayout imageLayout;
|
||
|
|
uint64_t cgen_var_0;
|
||
|
|
memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
|
||
|
|
*readStreamPtrPtr += 1 * 8;
|
||
|
|
*(VkImageView*)&imageView =
|
||
|
|
(VkImageView)unbox_VkImageView((VkImageView)(*&cgen_var_0));
|
||
|
|
memcpy((VkImageLayout*)&imageLayout, *readStreamPtrPtr, sizeof(VkImageLayout));
|
||
|
|
*readStreamPtrPtr += sizeof(VkImageLayout);
|
||
|
|
vk->vkCmdBindInvocationMaskHUAWEI((VkCommandBuffer)dispatchHandle, imageView,
|
||
|
|
imageLayout);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_NV_external_memory_rdma
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_extended_dynamic_state2
|
||
|
|
case OP_vkCmdSetPatchControlPointsEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetPatchControlPointsEXT subdecode");
|
||
|
|
uint32_t patchControlPoints;
|
||
|
|
memcpy((uint32_t*)&patchControlPoints, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdSetPatchControlPointsEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
patchControlPoints);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetRasterizerDiscardEnableEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetRasterizerDiscardEnableEXT subdecode");
|
||
|
|
VkBool32 rasterizerDiscardEnable;
|
||
|
|
memcpy((VkBool32*)&rasterizerDiscardEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
||
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
||
|
|
vk->vkCmdSetRasterizerDiscardEnableEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
rasterizerDiscardEnable);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetDepthBiasEnableEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetDepthBiasEnableEXT subdecode");
|
||
|
|
VkBool32 depthBiasEnable;
|
||
|
|
memcpy((VkBool32*)&depthBiasEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
||
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
||
|
|
vk->vkCmdSetDepthBiasEnableEXT((VkCommandBuffer)dispatchHandle, depthBiasEnable);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetLogicOpEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetLogicOpEXT subdecode");
|
||
|
|
VkLogicOp logicOp;
|
||
|
|
memcpy((VkLogicOp*)&logicOp, *readStreamPtrPtr, sizeof(VkLogicOp));
|
||
|
|
*readStreamPtrPtr += sizeof(VkLogicOp);
|
||
|
|
vk->vkCmdSetLogicOpEXT((VkCommandBuffer)dispatchHandle, logicOp);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetPrimitiveRestartEnableEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetPrimitiveRestartEnableEXT subdecode");
|
||
|
|
VkBool32 primitiveRestartEnable;
|
||
|
|
memcpy((VkBool32*)&primitiveRestartEnable, *readStreamPtrPtr, sizeof(VkBool32));
|
||
|
|
*readStreamPtrPtr += sizeof(VkBool32);
|
||
|
|
vk->vkCmdSetPrimitiveRestartEnableEXT((VkCommandBuffer)dispatchHandle,
|
||
|
|
primitiveRestartEnable);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_QNX_screen_surface
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_color_write_enable
|
||
|
|
case OP_vkCmdSetColorWriteEnableEXT: {
|
||
|
|
android::base::beginTrace("vkCmdSetColorWriteEnableEXT subdecode");
|
||
|
|
uint32_t attachmentCount;
|
||
|
|
const VkBool32* pColorWriteEnables;
|
||
|
|
VkBool32 stack_pColorWriteEnables[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&attachmentCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((attachmentCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pColorWriteEnables = (VkBool32*)stack_pColorWriteEnables;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pColorWriteEnables,
|
||
|
|
((attachmentCount)) * sizeof(const VkBool32));
|
||
|
|
}
|
||
|
|
memcpy((VkBool32*)pColorWriteEnables, *readStreamPtrPtr,
|
||
|
|
((attachmentCount)) * sizeof(const VkBool32));
|
||
|
|
*readStreamPtrPtr += ((attachmentCount)) * sizeof(const VkBool32);
|
||
|
|
vk->vkCmdSetColorWriteEnableEXT((VkCommandBuffer)dispatchHandle, attachmentCount,
|
||
|
|
pColorWriteEnables);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_GOOGLE_gfxstream
|
||
|
|
case OP_vkBeginCommandBufferAsyncGOOGLE: {
|
||
|
|
android::base::beginTrace("vkBeginCommandBufferAsyncGOOGLE subdecode");
|
||
|
|
const VkCommandBufferBeginInfo* pBeginInfo;
|
||
|
|
VkCommandBufferBeginInfo stack_pBeginInfo[1];
|
||
|
|
pBeginInfo = (VkCommandBufferBeginInfo*)stack_pBeginInfo;
|
||
|
|
reservedunmarshal_VkCommandBufferBeginInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCommandBufferBeginInfo*)(pBeginInfo),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
if (pBeginInfo) {
|
||
|
|
transform_tohost_VkCommandBufferBeginInfo(
|
||
|
|
globalstate, (VkCommandBufferBeginInfo*)(pBeginInfo));
|
||
|
|
}
|
||
|
|
this->on_vkBeginCommandBufferAsyncGOOGLE(
|
||
|
|
pool, (VkCommandBuffer)(boxed_dispatchHandle), pBeginInfo, context);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkEndCommandBufferAsyncGOOGLE: {
|
||
|
|
android::base::beginTrace("vkEndCommandBufferAsyncGOOGLE subdecode");
|
||
|
|
this->on_vkEndCommandBufferAsyncGOOGLE(
|
||
|
|
pool, (VkCommandBuffer)(boxed_dispatchHandle), context);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkResetCommandBufferAsyncGOOGLE: {
|
||
|
|
android::base::beginTrace("vkResetCommandBufferAsyncGOOGLE subdecode");
|
||
|
|
VkCommandBufferResetFlags flags;
|
||
|
|
memcpy((VkCommandBufferResetFlags*)&flags, *readStreamPtrPtr,
|
||
|
|
sizeof(VkCommandBufferResetFlags));
|
||
|
|
*readStreamPtrPtr += sizeof(VkCommandBufferResetFlags);
|
||
|
|
this->on_vkResetCommandBufferAsyncGOOGLE(
|
||
|
|
pool, (VkCommandBuffer)(boxed_dispatchHandle), flags);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCommandBufferHostSyncGOOGLE: {
|
||
|
|
android::base::beginTrace("vkCommandBufferHostSyncGOOGLE subdecode");
|
||
|
|
uint32_t needHostSync;
|
||
|
|
uint32_t sequenceNumber;
|
||
|
|
memcpy((uint32_t*)&needHostSync, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
memcpy((uint32_t*)&sequenceNumber, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
this->on_vkCommandBufferHostSyncGOOGLE(
|
||
|
|
pool, (VkCommandBuffer)(boxed_dispatchHandle), needHostSync, sequenceNumber);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_global_priority_query
|
||
|
|
#endif
|
||
|
|
#ifdef VK_EXT_multi_draw
|
||
|
|
case OP_vkCmdDrawMultiEXT: {
|
||
|
|
android::base::beginTrace("vkCmdDrawMultiEXT subdecode");
|
||
|
|
uint32_t drawCount;
|
||
|
|
const VkMultiDrawInfoEXT* pVertexInfo;
|
||
|
|
VkMultiDrawInfoEXT stack_pVertexInfo[MAX_STACK_ITEMS];
|
||
|
|
uint32_t instanceCount;
|
||
|
|
uint32_t firstInstance;
|
||
|
|
uint32_t stride;
|
||
|
|
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) {
|
||
|
|
if (((drawCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pVertexInfo = (VkMultiDrawInfoEXT*)stack_pVertexInfo;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pVertexInfo,
|
||
|
|
((drawCount)) * sizeof(const VkMultiDrawInfoEXT));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((drawCount)); ++i) {
|
||
|
|
reservedunmarshal_VkMultiDrawInfoEXT(readStream, 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(globalstate,
|
||
|
|
(VkMultiDrawInfoEXT*)(pVertexInfo + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdDrawMultiEXT((VkCommandBuffer)dispatchHandle, drawCount, pVertexInfo,
|
||
|
|
instanceCount, firstInstance, stride);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdDrawMultiIndexedEXT: {
|
||
|
|
android::base::beginTrace("vkCmdDrawMultiIndexedEXT subdecode");
|
||
|
|
uint32_t drawCount;
|
||
|
|
const VkMultiDrawIndexedInfoEXT* pIndexInfo;
|
||
|
|
VkMultiDrawIndexedInfoEXT stack_pIndexInfo[MAX_STACK_ITEMS];
|
||
|
|
uint32_t instanceCount;
|
||
|
|
uint32_t firstInstance;
|
||
|
|
uint32_t stride;
|
||
|
|
const int32_t* pVertexOffset;
|
||
|
|
int32_t stack_pVertexOffset[1];
|
||
|
|
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) {
|
||
|
|
if (((drawCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pIndexInfo = (VkMultiDrawIndexedInfoEXT*)stack_pIndexInfo;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pIndexInfo,
|
||
|
|
((drawCount)) * sizeof(const VkMultiDrawIndexedInfoEXT));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((drawCount)); ++i) {
|
||
|
|
reservedunmarshal_VkMultiDrawIndexedInfoEXT(
|
||
|
|
readStream, 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) {
|
||
|
|
pVertexOffset = (int32_t*)stack_pVertexOffset;
|
||
|
|
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(
|
||
|
|
globalstate, (VkMultiDrawIndexedInfoEXT*)(pIndexInfo + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
vk->vkCmdDrawMultiIndexedEXT((VkCommandBuffer)dispatchHandle, drawCount, pIndexInfo,
|
||
|
|
instanceCount, firstInstance, stride, pVertexOffset);
|
||
|
|
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
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_acceleration_structure
|
||
|
|
case OP_vkCmdBuildAccelerationStructuresKHR: {
|
||
|
|
android::base::beginTrace("vkCmdBuildAccelerationStructuresKHR subdecode");
|
||
|
|
uint32_t infoCount;
|
||
|
|
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos;
|
||
|
|
VkAccelerationStructureBuildGeometryInfoKHR stack_pInfos[MAX_STACK_ITEMS];
|
||
|
|
const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos;
|
||
|
|
VkAccelerationStructureBuildRangeInfoKHR* stack_ppBuildRangeInfos[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&infoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((infoCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pInfos = (VkAccelerationStructureBuildGeometryInfoKHR*)stack_pInfos;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pInfos,
|
||
|
|
((infoCount)) * sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i) {
|
||
|
|
reservedunmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (pInfos) {
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i) {
|
||
|
|
transform_tohost_VkAccelerationStructureBuildGeometryInfoKHR(
|
||
|
|
globalstate,
|
||
|
|
(VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
(void)ppBuildRangeInfos;
|
||
|
|
vk->vkCmdBuildAccelerationStructuresKHR((VkCommandBuffer)dispatchHandle, infoCount,
|
||
|
|
pInfos, ppBuildRangeInfos);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdBuildAccelerationStructuresIndirectKHR: {
|
||
|
|
android::base::beginTrace("vkCmdBuildAccelerationStructuresIndirectKHR subdecode");
|
||
|
|
uint32_t infoCount;
|
||
|
|
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos;
|
||
|
|
VkAccelerationStructureBuildGeometryInfoKHR stack_pInfos[MAX_STACK_ITEMS];
|
||
|
|
const VkDeviceAddress* pIndirectDeviceAddresses;
|
||
|
|
VkDeviceAddress stack_pIndirectDeviceAddresses[MAX_STACK_ITEMS];
|
||
|
|
const uint32_t* pIndirectStrides;
|
||
|
|
uint32_t stack_pIndirectStrides[MAX_STACK_ITEMS];
|
||
|
|
const uint32_t* const* ppMaxPrimitiveCounts;
|
||
|
|
uint32_t* stack_ppMaxPrimitiveCounts[MAX_STACK_ITEMS];
|
||
|
|
memcpy((uint32_t*)&infoCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((infoCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pInfos = (VkAccelerationStructureBuildGeometryInfoKHR*)stack_pInfos;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pInfos,
|
||
|
|
((infoCount)) * sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
|
||
|
|
}
|
||
|
|
for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i) {
|
||
|
|
reservedunmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
}
|
||
|
|
if (((infoCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pIndirectDeviceAddresses = (VkDeviceAddress*)stack_pIndirectDeviceAddresses;
|
||
|
|
} else {
|
||
|
|
readStream->alloc((void**)&pIndirectDeviceAddresses,
|
||
|
|
((infoCount)) * sizeof(const VkDeviceAddress));
|
||
|
|
}
|
||
|
|
memcpy((VkDeviceAddress*)pIndirectDeviceAddresses, *readStreamPtrPtr,
|
||
|
|
((infoCount)) * sizeof(const VkDeviceAddress));
|
||
|
|
*readStreamPtrPtr += ((infoCount)) * sizeof(const VkDeviceAddress);
|
||
|
|
if (((infoCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pIndirectStrides = (uint32_t*)stack_pIndirectStrides;
|
||
|
|
} else {
|
||
|
|
readStream->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(
|
||
|
|
globalstate,
|
||
|
|
(VkAccelerationStructureBuildGeometryInfoKHR*)(pInfos + i));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
(void)ppMaxPrimitiveCounts;
|
||
|
|
vk->vkCmdBuildAccelerationStructuresIndirectKHR(
|
||
|
|
(VkCommandBuffer)dispatchHandle, infoCount, pInfos, pIndirectDeviceAddresses,
|
||
|
|
pIndirectStrides, ppMaxPrimitiveCounts);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyAccelerationStructureKHR: {
|
||
|
|
android::base::beginTrace("vkCmdCopyAccelerationStructureKHR subdecode");
|
||
|
|
const VkCopyAccelerationStructureInfoKHR* pInfo;
|
||
|
|
VkCopyAccelerationStructureInfoKHR stack_pInfo[1];
|
||
|
|
pInfo = (VkCopyAccelerationStructureInfoKHR*)stack_pInfo;
|
||
|
|
reservedunmarshal_VkCopyAccelerationStructureInfoKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCopyAccelerationStructureInfoKHR*)(pInfo), readStreamPtrPtr);
|
||
|
|
if (pInfo) {
|
||
|
|
transform_tohost_VkCopyAccelerationStructureInfoKHR(
|
||
|
|
globalstate, (VkCopyAccelerationStructureInfoKHR*)(pInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdCopyAccelerationStructureKHR((VkCommandBuffer)dispatchHandle, pInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyAccelerationStructureToMemoryKHR: {
|
||
|
|
android::base::beginTrace("vkCmdCopyAccelerationStructureToMemoryKHR subdecode");
|
||
|
|
const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo;
|
||
|
|
VkCopyAccelerationStructureToMemoryInfoKHR stack_pInfo[1];
|
||
|
|
pInfo = (VkCopyAccelerationStructureToMemoryInfoKHR*)stack_pInfo;
|
||
|
|
reservedunmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCopyAccelerationStructureToMemoryInfoKHR*)(pInfo), readStreamPtrPtr);
|
||
|
|
if (pInfo) {
|
||
|
|
transform_tohost_VkCopyAccelerationStructureToMemoryInfoKHR(
|
||
|
|
globalstate, (VkCopyAccelerationStructureToMemoryInfoKHR*)(pInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdCopyAccelerationStructureToMemoryKHR((VkCommandBuffer)dispatchHandle,
|
||
|
|
pInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdCopyMemoryToAccelerationStructureKHR: {
|
||
|
|
android::base::beginTrace("vkCmdCopyMemoryToAccelerationStructureKHR subdecode");
|
||
|
|
const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo;
|
||
|
|
VkCopyMemoryToAccelerationStructureInfoKHR stack_pInfo[1];
|
||
|
|
pInfo = (VkCopyMemoryToAccelerationStructureInfoKHR*)stack_pInfo;
|
||
|
|
reservedunmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkCopyMemoryToAccelerationStructureInfoKHR*)(pInfo), readStreamPtrPtr);
|
||
|
|
if (pInfo) {
|
||
|
|
transform_tohost_VkCopyMemoryToAccelerationStructureInfoKHR(
|
||
|
|
globalstate, (VkCopyMemoryToAccelerationStructureInfoKHR*)(pInfo));
|
||
|
|
}
|
||
|
|
vk->vkCmdCopyMemoryToAccelerationStructureKHR((VkCommandBuffer)dispatchHandle,
|
||
|
|
pInfo);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdWriteAccelerationStructuresPropertiesKHR: {
|
||
|
|
android::base::beginTrace(
|
||
|
|
"vkCmdWriteAccelerationStructuresPropertiesKHR subdecode");
|
||
|
|
uint32_t accelerationStructureCount;
|
||
|
|
const VkAccelerationStructureKHR* pAccelerationStructures;
|
||
|
|
VkAccelerationStructureKHR stack_pAccelerationStructures[MAX_STACK_ITEMS];
|
||
|
|
VkQueryType queryType;
|
||
|
|
VkQueryPool queryPool;
|
||
|
|
uint32_t firstQuery;
|
||
|
|
memcpy((uint32_t*)&accelerationStructureCount, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
if (((accelerationStructureCount)) <= MAX_STACK_ITEMS) {
|
||
|
|
pAccelerationStructures =
|
||
|
|
(VkAccelerationStructureKHR*)stack_pAccelerationStructures;
|
||
|
|
} else {
|
||
|
|
readStream->alloc(
|
||
|
|
(void**)&pAccelerationStructures,
|
||
|
|
((accelerationStructureCount)) * sizeof(const VkAccelerationStructureKHR));
|
||
|
|
}
|
||
|
|
if (((accelerationStructureCount))) {
|
||
|
|
uint8_t* cgen_var_0_ptr = (uint8_t*)(*readStreamPtrPtr);
|
||
|
|
*readStreamPtrPtr += 8 * ((accelerationStructureCount));
|
||
|
|
for (uint32_t k = 0; k < ((accelerationStructureCount)); ++k) {
|
||
|
|
uint64_t tmpval;
|
||
|
|
memcpy(&tmpval, cgen_var_0_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_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);
|
||
|
|
vk->vkCmdWriteAccelerationStructuresPropertiesKHR(
|
||
|
|
(VkCommandBuffer)dispatchHandle, accelerationStructureCount,
|
||
|
|
pAccelerationStructures, queryType, queryPool, firstQuery);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_ray_tracing_pipeline
|
||
|
|
case OP_vkCmdTraceRaysKHR: {
|
||
|
|
android::base::beginTrace("vkCmdTraceRaysKHR subdecode");
|
||
|
|
const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable;
|
||
|
|
VkStridedDeviceAddressRegionKHR stack_pRaygenShaderBindingTable[1];
|
||
|
|
const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable;
|
||
|
|
VkStridedDeviceAddressRegionKHR stack_pMissShaderBindingTable[1];
|
||
|
|
const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable;
|
||
|
|
VkStridedDeviceAddressRegionKHR stack_pHitShaderBindingTable[1];
|
||
|
|
const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable;
|
||
|
|
VkStridedDeviceAddressRegionKHR stack_pCallableShaderBindingTable[1];
|
||
|
|
uint32_t width;
|
||
|
|
uint32_t height;
|
||
|
|
uint32_t depth;
|
||
|
|
pRaygenShaderBindingTable =
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)stack_pRaygenShaderBindingTable;
|
||
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
pMissShaderBindingTable =
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)stack_pMissShaderBindingTable;
|
||
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable), readStreamPtrPtr);
|
||
|
|
pHitShaderBindingTable =
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)stack_pHitShaderBindingTable;
|
||
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable), readStreamPtrPtr);
|
||
|
|
pCallableShaderBindingTable =
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)stack_pCallableShaderBindingTable;
|
||
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
||
|
|
readStream, 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(
|
||
|
|
globalstate, (VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable));
|
||
|
|
}
|
||
|
|
if (pMissShaderBindingTable) {
|
||
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
||
|
|
globalstate, (VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable));
|
||
|
|
}
|
||
|
|
if (pHitShaderBindingTable) {
|
||
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
||
|
|
globalstate, (VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable));
|
||
|
|
}
|
||
|
|
if (pCallableShaderBindingTable) {
|
||
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
||
|
|
globalstate,
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable));
|
||
|
|
}
|
||
|
|
vk->vkCmdTraceRaysKHR((VkCommandBuffer)dispatchHandle, pRaygenShaderBindingTable,
|
||
|
|
pMissShaderBindingTable, pHitShaderBindingTable,
|
||
|
|
pCallableShaderBindingTable, width, height, depth);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdTraceRaysIndirectKHR: {
|
||
|
|
android::base::beginTrace("vkCmdTraceRaysIndirectKHR subdecode");
|
||
|
|
const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable;
|
||
|
|
VkStridedDeviceAddressRegionKHR stack_pRaygenShaderBindingTable[1];
|
||
|
|
const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable;
|
||
|
|
VkStridedDeviceAddressRegionKHR stack_pMissShaderBindingTable[1];
|
||
|
|
const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable;
|
||
|
|
VkStridedDeviceAddressRegionKHR stack_pHitShaderBindingTable[1];
|
||
|
|
const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable;
|
||
|
|
VkStridedDeviceAddressRegionKHR stack_pCallableShaderBindingTable[1];
|
||
|
|
VkDeviceAddress indirectDeviceAddress;
|
||
|
|
pRaygenShaderBindingTable =
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)stack_pRaygenShaderBindingTable;
|
||
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
pMissShaderBindingTable =
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)stack_pMissShaderBindingTable;
|
||
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable), readStreamPtrPtr);
|
||
|
|
pHitShaderBindingTable =
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)stack_pHitShaderBindingTable;
|
||
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable), readStreamPtrPtr);
|
||
|
|
pCallableShaderBindingTable =
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)stack_pCallableShaderBindingTable;
|
||
|
|
reservedunmarshal_VkStridedDeviceAddressRegionKHR(
|
||
|
|
readStream, VK_STRUCTURE_TYPE_MAX_ENUM,
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable),
|
||
|
|
readStreamPtrPtr);
|
||
|
|
memcpy((VkDeviceAddress*)&indirectDeviceAddress, *readStreamPtrPtr,
|
||
|
|
sizeof(VkDeviceAddress));
|
||
|
|
*readStreamPtrPtr += sizeof(VkDeviceAddress);
|
||
|
|
if (pRaygenShaderBindingTable) {
|
||
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
||
|
|
globalstate, (VkStridedDeviceAddressRegionKHR*)(pRaygenShaderBindingTable));
|
||
|
|
}
|
||
|
|
if (pMissShaderBindingTable) {
|
||
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
||
|
|
globalstate, (VkStridedDeviceAddressRegionKHR*)(pMissShaderBindingTable));
|
||
|
|
}
|
||
|
|
if (pHitShaderBindingTable) {
|
||
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
||
|
|
globalstate, (VkStridedDeviceAddressRegionKHR*)(pHitShaderBindingTable));
|
||
|
|
}
|
||
|
|
if (pCallableShaderBindingTable) {
|
||
|
|
transform_tohost_VkStridedDeviceAddressRegionKHR(
|
||
|
|
globalstate,
|
||
|
|
(VkStridedDeviceAddressRegionKHR*)(pCallableShaderBindingTable));
|
||
|
|
}
|
||
|
|
vk->vkCmdTraceRaysIndirectKHR((VkCommandBuffer)dispatchHandle,
|
||
|
|
pRaygenShaderBindingTable, pMissShaderBindingTable,
|
||
|
|
pHitShaderBindingTable, pCallableShaderBindingTable,
|
||
|
|
indirectDeviceAddress);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case OP_vkCmdSetRayTracingPipelineStackSizeKHR: {
|
||
|
|
android::base::beginTrace("vkCmdSetRayTracingPipelineStackSizeKHR subdecode");
|
||
|
|
uint32_t pipelineStackSize;
|
||
|
|
memcpy((uint32_t*)&pipelineStackSize, *readStreamPtrPtr, sizeof(uint32_t));
|
||
|
|
*readStreamPtrPtr += sizeof(uint32_t);
|
||
|
|
vk->vkCmdSetRayTracingPipelineStackSizeKHR((VkCommandBuffer)dispatchHandle,
|
||
|
|
pipelineStackSize);
|
||
|
|
android::base::endTrace();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#ifdef VK_KHR_ray_query
|
||
|
|
#endif
|
||
|
|
default: {
|
||
|
|
GFXSTREAM_ABORT(::emugl::FatalError(::emugl::ABORT_REASON_OTHER))
|
||
|
|
<< "Unrecognized opcode " << opcode;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
++count;
|
||
|
|
if (count % 1000 == 0) {
|
||
|
|
pool->freeAll();
|
||
|
|
};
|
||
|
|
ptr += packetLen;
|
||
|
|
}
|
||
|
|
pool->freeAll();
|
||
|
|
return ptr - (unsigned char*)buf;
|
||
|
|
;
|
||
|
|
}
|