// 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 codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry // codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream // codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/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)); } this->on_vkCmdBeginRenderPass(pool, (VkCommandBuffer)(boxed_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)); } this->on_vkCmdBeginRenderPass2(pool, (VkCommandBuffer)(boxed_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_VERSION_1_3 case OP_vkCmdSetEvent2: { android::base::beginTrace("vkCmdSetEvent2 subdecode"); VkEvent event; const VkDependencyInfo* pDependencyInfo; VkDependencyInfo 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 = (VkDependencyInfo*)stack_pDependencyInfo; reservedunmarshal_VkDependencyInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDependencyInfo*)(pDependencyInfo), readStreamPtrPtr); if (pDependencyInfo) { transform_tohost_VkDependencyInfo(globalstate, (VkDependencyInfo*)(pDependencyInfo)); } vk->vkCmdSetEvent2((VkCommandBuffer)dispatchHandle, event, pDependencyInfo); android::base::endTrace(); break; } case OP_vkCmdResetEvent2: { android::base::beginTrace("vkCmdResetEvent2 subdecode"); VkEvent event; VkPipelineStageFlags2 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((VkPipelineStageFlags2*)&stageMask, *readStreamPtrPtr, sizeof(VkPipelineStageFlags2)); *readStreamPtrPtr += sizeof(VkPipelineStageFlags2); vk->vkCmdResetEvent2((VkCommandBuffer)dispatchHandle, event, stageMask); android::base::endTrace(); break; } case OP_vkCmdWaitEvents2: { android::base::beginTrace("vkCmdWaitEvents2 subdecode"); uint32_t eventCount; const VkEvent* pEvents; VkEvent stack_pEvents[MAX_STACK_ITEMS]; const VkDependencyInfo* pDependencyInfos; VkDependencyInfo 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 = (VkDependencyInfo*)stack_pDependencyInfos; } else { readStream->alloc((void**)&pDependencyInfos, ((eventCount)) * sizeof(const VkDependencyInfo)); } for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) { reservedunmarshal_VkDependencyInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDependencyInfo*)(pDependencyInfos + i), readStreamPtrPtr); } if (pDependencyInfos) { for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) { transform_tohost_VkDependencyInfo( globalstate, (VkDependencyInfo*)(pDependencyInfos + i)); } } vk->vkCmdWaitEvents2((VkCommandBuffer)dispatchHandle, eventCount, pEvents, pDependencyInfos); android::base::endTrace(); break; } case OP_vkCmdPipelineBarrier2: { android::base::beginTrace("vkCmdPipelineBarrier2 subdecode"); const VkDependencyInfo* pDependencyInfo; VkDependencyInfo stack_pDependencyInfo[1]; pDependencyInfo = (VkDependencyInfo*)stack_pDependencyInfo; reservedunmarshal_VkDependencyInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDependencyInfo*)(pDependencyInfo), readStreamPtrPtr); if (pDependencyInfo) { transform_tohost_VkDependencyInfo(globalstate, (VkDependencyInfo*)(pDependencyInfo)); } vk->vkCmdPipelineBarrier2((VkCommandBuffer)dispatchHandle, pDependencyInfo); android::base::endTrace(); break; } case OP_vkCmdWriteTimestamp2: { android::base::beginTrace("vkCmdWriteTimestamp2 subdecode"); VkPipelineStageFlags2 stage; VkQueryPool queryPool; uint32_t query; memcpy((VkPipelineStageFlags2*)&stage, *readStreamPtrPtr, sizeof(VkPipelineStageFlags2)); *readStreamPtrPtr += sizeof(VkPipelineStageFlags2); 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->vkCmdWriteTimestamp2((VkCommandBuffer)dispatchHandle, stage, queryPool, query); android::base::endTrace(); break; } case OP_vkCmdCopyBuffer2: { android::base::beginTrace("vkCmdCopyBuffer2 subdecode"); const VkCopyBufferInfo2* pCopyBufferInfo; VkCopyBufferInfo2 stack_pCopyBufferInfo[1]; pCopyBufferInfo = (VkCopyBufferInfo2*)stack_pCopyBufferInfo; reservedunmarshal_VkCopyBufferInfo2(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyBufferInfo2*)(pCopyBufferInfo), readStreamPtrPtr); if (pCopyBufferInfo) { transform_tohost_VkCopyBufferInfo2(globalstate, (VkCopyBufferInfo2*)(pCopyBufferInfo)); } vk->vkCmdCopyBuffer2((VkCommandBuffer)dispatchHandle, pCopyBufferInfo); android::base::endTrace(); break; } case OP_vkCmdCopyImage2: { android::base::beginTrace("vkCmdCopyImage2 subdecode"); const VkCopyImageInfo2* pCopyImageInfo; VkCopyImageInfo2 stack_pCopyImageInfo[1]; pCopyImageInfo = (VkCopyImageInfo2*)stack_pCopyImageInfo; reservedunmarshal_VkCopyImageInfo2(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyImageInfo2*)(pCopyImageInfo), readStreamPtrPtr); if (pCopyImageInfo) { transform_tohost_VkCopyImageInfo2(globalstate, (VkCopyImageInfo2*)(pCopyImageInfo)); } this->on_vkCmdCopyImage2(pool, (VkCommandBuffer)(boxed_dispatchHandle), pCopyImageInfo); android::base::endTrace(); break; } case OP_vkCmdCopyBufferToImage2: { android::base::beginTrace("vkCmdCopyBufferToImage2 subdecode"); const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo; VkCopyBufferToImageInfo2 stack_pCopyBufferToImageInfo[1]; pCopyBufferToImageInfo = (VkCopyBufferToImageInfo2*)stack_pCopyBufferToImageInfo; reservedunmarshal_VkCopyBufferToImageInfo2( readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyBufferToImageInfo2*)(pCopyBufferToImageInfo), readStreamPtrPtr); if (pCopyBufferToImageInfo) { transform_tohost_VkCopyBufferToImageInfo2( globalstate, (VkCopyBufferToImageInfo2*)(pCopyBufferToImageInfo)); } this->on_vkCmdCopyBufferToImage2(pool, (VkCommandBuffer)(boxed_dispatchHandle), pCopyBufferToImageInfo, context); android::base::endTrace(); break; } case OP_vkCmdCopyImageToBuffer2: { android::base::beginTrace("vkCmdCopyImageToBuffer2 subdecode"); const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo; VkCopyImageToBufferInfo2 stack_pCopyImageToBufferInfo[1]; pCopyImageToBufferInfo = (VkCopyImageToBufferInfo2*)stack_pCopyImageToBufferInfo; reservedunmarshal_VkCopyImageToBufferInfo2( readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyImageToBufferInfo2*)(pCopyImageToBufferInfo), readStreamPtrPtr); if (pCopyImageToBufferInfo) { transform_tohost_VkCopyImageToBufferInfo2( globalstate, (VkCopyImageToBufferInfo2*)(pCopyImageToBufferInfo)); } this->on_vkCmdCopyImageToBuffer2(pool, (VkCommandBuffer)(boxed_dispatchHandle), pCopyImageToBufferInfo); android::base::endTrace(); break; } case OP_vkCmdBlitImage2: { android::base::beginTrace("vkCmdBlitImage2 subdecode"); const VkBlitImageInfo2* pBlitImageInfo; VkBlitImageInfo2 stack_pBlitImageInfo[1]; pBlitImageInfo = (VkBlitImageInfo2*)stack_pBlitImageInfo; reservedunmarshal_VkBlitImageInfo2(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBlitImageInfo2*)(pBlitImageInfo), readStreamPtrPtr); if (pBlitImageInfo) { transform_tohost_VkBlitImageInfo2(globalstate, (VkBlitImageInfo2*)(pBlitImageInfo)); } vk->vkCmdBlitImage2((VkCommandBuffer)dispatchHandle, pBlitImageInfo); android::base::endTrace(); break; } case OP_vkCmdResolveImage2: { android::base::beginTrace("vkCmdResolveImage2 subdecode"); const VkResolveImageInfo2* pResolveImageInfo; VkResolveImageInfo2 stack_pResolveImageInfo[1]; pResolveImageInfo = (VkResolveImageInfo2*)stack_pResolveImageInfo; reservedunmarshal_VkResolveImageInfo2(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkResolveImageInfo2*)(pResolveImageInfo), readStreamPtrPtr); if (pResolveImageInfo) { transform_tohost_VkResolveImageInfo2(globalstate, (VkResolveImageInfo2*)(pResolveImageInfo)); } vk->vkCmdResolveImage2((VkCommandBuffer)dispatchHandle, pResolveImageInfo); android::base::endTrace(); break; } case OP_vkCmdBeginRendering: { android::base::beginTrace("vkCmdBeginRendering subdecode"); const VkRenderingInfo* pRenderingInfo; VkRenderingInfo stack_pRenderingInfo[1]; pRenderingInfo = (VkRenderingInfo*)stack_pRenderingInfo; reservedunmarshal_VkRenderingInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderingInfo*)(pRenderingInfo), readStreamPtrPtr); if (pRenderingInfo) { transform_tohost_VkRenderingInfo(globalstate, (VkRenderingInfo*)(pRenderingInfo)); } vk->vkCmdBeginRendering((VkCommandBuffer)dispatchHandle, pRenderingInfo); android::base::endTrace(); break; } case OP_vkCmdEndRendering: { android::base::beginTrace("vkCmdEndRendering subdecode"); vk->vkCmdEndRendering((VkCommandBuffer)dispatchHandle); android::base::endTrace(); break; } case OP_vkCmdSetCullMode: { android::base::beginTrace("vkCmdSetCullMode subdecode"); VkCullModeFlags cullMode; memcpy((VkCullModeFlags*)&cullMode, *readStreamPtrPtr, sizeof(VkCullModeFlags)); *readStreamPtrPtr += sizeof(VkCullModeFlags); vk->vkCmdSetCullMode((VkCommandBuffer)dispatchHandle, cullMode); android::base::endTrace(); break; } case OP_vkCmdSetFrontFace: { android::base::beginTrace("vkCmdSetFrontFace subdecode"); VkFrontFace frontFace; memcpy((VkFrontFace*)&frontFace, *readStreamPtrPtr, sizeof(VkFrontFace)); *readStreamPtrPtr += sizeof(VkFrontFace); vk->vkCmdSetFrontFace((VkCommandBuffer)dispatchHandle, frontFace); android::base::endTrace(); break; } case OP_vkCmdSetPrimitiveTopology: { android::base::beginTrace("vkCmdSetPrimitiveTopology subdecode"); VkPrimitiveTopology primitiveTopology; memcpy((VkPrimitiveTopology*)&primitiveTopology, *readStreamPtrPtr, sizeof(VkPrimitiveTopology)); *readStreamPtrPtr += sizeof(VkPrimitiveTopology); vk->vkCmdSetPrimitiveTopology((VkCommandBuffer)dispatchHandle, primitiveTopology); android::base::endTrace(); break; } case OP_vkCmdSetViewportWithCount: { android::base::beginTrace("vkCmdSetViewportWithCount 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->vkCmdSetViewportWithCount((VkCommandBuffer)dispatchHandle, viewportCount, pViewports); android::base::endTrace(); break; } case OP_vkCmdSetScissorWithCount: { android::base::beginTrace("vkCmdSetScissorWithCount 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->vkCmdSetScissorWithCount((VkCommandBuffer)dispatchHandle, scissorCount, pScissors); android::base::endTrace(); break; } case OP_vkCmdBindVertexBuffers2: { android::base::beginTrace("vkCmdBindVertexBuffers2 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->vkCmdBindVertexBuffers2((VkCommandBuffer)dispatchHandle, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); android::base::endTrace(); break; } case OP_vkCmdSetDepthTestEnable: { android::base::beginTrace("vkCmdSetDepthTestEnable subdecode"); VkBool32 depthTestEnable; memcpy((VkBool32*)&depthTestEnable, *readStreamPtrPtr, sizeof(VkBool32)); *readStreamPtrPtr += sizeof(VkBool32); vk->vkCmdSetDepthTestEnable((VkCommandBuffer)dispatchHandle, depthTestEnable); android::base::endTrace(); break; } case OP_vkCmdSetDepthWriteEnable: { android::base::beginTrace("vkCmdSetDepthWriteEnable subdecode"); VkBool32 depthWriteEnable; memcpy((VkBool32*)&depthWriteEnable, *readStreamPtrPtr, sizeof(VkBool32)); *readStreamPtrPtr += sizeof(VkBool32); vk->vkCmdSetDepthWriteEnable((VkCommandBuffer)dispatchHandle, depthWriteEnable); android::base::endTrace(); break; } case OP_vkCmdSetDepthCompareOp: { android::base::beginTrace("vkCmdSetDepthCompareOp subdecode"); VkCompareOp depthCompareOp; memcpy((VkCompareOp*)&depthCompareOp, *readStreamPtrPtr, sizeof(VkCompareOp)); *readStreamPtrPtr += sizeof(VkCompareOp); vk->vkCmdSetDepthCompareOp((VkCommandBuffer)dispatchHandle, depthCompareOp); android::base::endTrace(); break; } case OP_vkCmdSetDepthBoundsTestEnable: { android::base::beginTrace("vkCmdSetDepthBoundsTestEnable subdecode"); VkBool32 depthBoundsTestEnable; memcpy((VkBool32*)&depthBoundsTestEnable, *readStreamPtrPtr, sizeof(VkBool32)); *readStreamPtrPtr += sizeof(VkBool32); vk->vkCmdSetDepthBoundsTestEnable((VkCommandBuffer)dispatchHandle, depthBoundsTestEnable); android::base::endTrace(); break; } case OP_vkCmdSetStencilTestEnable: { android::base::beginTrace("vkCmdSetStencilTestEnable subdecode"); VkBool32 stencilTestEnable; memcpy((VkBool32*)&stencilTestEnable, *readStreamPtrPtr, sizeof(VkBool32)); *readStreamPtrPtr += sizeof(VkBool32); vk->vkCmdSetStencilTestEnable((VkCommandBuffer)dispatchHandle, stencilTestEnable); android::base::endTrace(); break; } case OP_vkCmdSetStencilOp: { android::base::beginTrace("vkCmdSetStencilOp 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->vkCmdSetStencilOp((VkCommandBuffer)dispatchHandle, faceMask, failOp, passOp, depthFailOp, compareOp); android::base::endTrace(); break; } case OP_vkCmdSetRasterizerDiscardEnable: { android::base::beginTrace("vkCmdSetRasterizerDiscardEnable subdecode"); VkBool32 rasterizerDiscardEnable; memcpy((VkBool32*)&rasterizerDiscardEnable, *readStreamPtrPtr, sizeof(VkBool32)); *readStreamPtrPtr += sizeof(VkBool32); vk->vkCmdSetRasterizerDiscardEnable((VkCommandBuffer)dispatchHandle, rasterizerDiscardEnable); android::base::endTrace(); break; } case OP_vkCmdSetDepthBiasEnable: { android::base::beginTrace("vkCmdSetDepthBiasEnable subdecode"); VkBool32 depthBiasEnable; memcpy((VkBool32*)&depthBiasEnable, *readStreamPtrPtr, sizeof(VkBool32)); *readStreamPtrPtr += sizeof(VkBool32); vk->vkCmdSetDepthBiasEnable((VkCommandBuffer)dispatchHandle, depthBiasEnable); android::base::endTrace(); break; } case OP_vkCmdSetPrimitiveRestartEnable: { android::base::beginTrace("vkCmdSetPrimitiveRestartEnable subdecode"); VkBool32 primitiveRestartEnable; memcpy((VkBool32*)&primitiveRestartEnable, *readStreamPtrPtr, sizeof(VkBool32)); *readStreamPtrPtr += sizeof(VkBool32); vk->vkCmdSetPrimitiveRestartEnable((VkCommandBuffer)dispatchHandle, primitiveRestartEnable); android::base::endTrace(); break; } #endif #ifdef VK_KHR_surface #endif #ifdef VK_KHR_swapchain #endif #ifdef VK_KHR_xcb_surface #endif #ifdef VK_KHR_android_surface #endif #ifdef VK_KHR_win32_surface #endif #ifdef VK_KHR_dynamic_rendering case OP_vkCmdBeginRenderingKHR: { android::base::beginTrace("vkCmdBeginRenderingKHR subdecode"); const VkRenderingInfo* pRenderingInfo; VkRenderingInfo stack_pRenderingInfo[1]; pRenderingInfo = (VkRenderingInfo*)stack_pRenderingInfo; reservedunmarshal_VkRenderingInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderingInfo*)(pRenderingInfo), readStreamPtrPtr); if (pRenderingInfo) { transform_tohost_VkRenderingInfo(globalstate, (VkRenderingInfo*)(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_get_physical_device_properties2 #endif #ifdef VK_KHR_maintenance1 #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_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_shader_float16_int8 #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)); } this->on_vkCmdBeginRenderPass2KHR(pool, (VkCommandBuffer)(boxed_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_external_fence_capabilities #endif #ifdef VK_KHR_external_fence #endif #ifdef VK_KHR_external_fence_fd #endif #ifdef VK_KHR_maintenance2 #endif #ifdef VK_KHR_dedicated_allocation #endif #ifdef VK_KHR_storage_buffer_storage_class #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_maintenance3 #endif #ifdef VK_KHR_shader_subgroup_extended_types #endif #ifdef VK_KHR_vulkan_memory_model #endif #ifdef VK_KHR_shader_terminate_invocation #endif #ifdef VK_KHR_buffer_device_address #endif #ifdef VK_KHR_pipeline_executable_properties #endif #ifdef VK_KHR_shader_integer_dot_product #endif #ifdef VK_KHR_shader_non_semantic_info #endif #ifdef VK_KHR_synchronization2 case OP_vkCmdSetEvent2KHR: { android::base::beginTrace("vkCmdSetEvent2KHR subdecode"); VkEvent event; const VkDependencyInfo* pDependencyInfo; VkDependencyInfo 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 = (VkDependencyInfo*)stack_pDependencyInfo; reservedunmarshal_VkDependencyInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDependencyInfo*)(pDependencyInfo), readStreamPtrPtr); if (pDependencyInfo) { transform_tohost_VkDependencyInfo(globalstate, (VkDependencyInfo*)(pDependencyInfo)); } vk->vkCmdSetEvent2KHR((VkCommandBuffer)dispatchHandle, event, pDependencyInfo); android::base::endTrace(); break; } case OP_vkCmdResetEvent2KHR: { android::base::beginTrace("vkCmdResetEvent2KHR subdecode"); VkEvent event; VkPipelineStageFlags2 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((VkPipelineStageFlags2*)&stageMask, *readStreamPtrPtr, sizeof(VkPipelineStageFlags2)); *readStreamPtrPtr += sizeof(VkPipelineStageFlags2); 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 VkDependencyInfo* pDependencyInfos; VkDependencyInfo 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 = (VkDependencyInfo*)stack_pDependencyInfos; } else { readStream->alloc((void**)&pDependencyInfos, ((eventCount)) * sizeof(const VkDependencyInfo)); } for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) { reservedunmarshal_VkDependencyInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDependencyInfo*)(pDependencyInfos + i), readStreamPtrPtr); } if (pDependencyInfos) { for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) { transform_tohost_VkDependencyInfo( globalstate, (VkDependencyInfo*)(pDependencyInfos + i)); } } vk->vkCmdWaitEvents2KHR((VkCommandBuffer)dispatchHandle, eventCount, pEvents, pDependencyInfos); android::base::endTrace(); break; } case OP_vkCmdPipelineBarrier2KHR: { android::base::beginTrace("vkCmdPipelineBarrier2KHR subdecode"); const VkDependencyInfo* pDependencyInfo; VkDependencyInfo stack_pDependencyInfo[1]; pDependencyInfo = (VkDependencyInfo*)stack_pDependencyInfo; reservedunmarshal_VkDependencyInfo(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDependencyInfo*)(pDependencyInfo), readStreamPtrPtr); if (pDependencyInfo) { transform_tohost_VkDependencyInfo(globalstate, (VkDependencyInfo*)(pDependencyInfo)); } vk->vkCmdPipelineBarrier2KHR((VkCommandBuffer)dispatchHandle, pDependencyInfo); android::base::endTrace(); break; } case OP_vkCmdWriteTimestamp2KHR: { android::base::beginTrace("vkCmdWriteTimestamp2KHR subdecode"); VkPipelineStageFlags2 stage; VkQueryPool queryPool; uint32_t query; memcpy((VkPipelineStageFlags2*)&stage, *readStreamPtrPtr, sizeof(VkPipelineStageFlags2)); *readStreamPtrPtr += sizeof(VkPipelineStageFlags2); 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"); VkPipelineStageFlags2 stage; VkBuffer dstBuffer; VkDeviceSize dstOffset; uint32_t marker; memcpy((VkPipelineStageFlags2*)&stage, *readStreamPtrPtr, sizeof(VkPipelineStageFlags2)); *readStreamPtrPtr += sizeof(VkPipelineStageFlags2); 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_zero_initialize_workgroup_memory #endif #ifdef VK_KHR_copy_commands2 case OP_vkCmdCopyBuffer2KHR: { android::base::beginTrace("vkCmdCopyBuffer2KHR subdecode"); const VkCopyBufferInfo2* pCopyBufferInfo; VkCopyBufferInfo2 stack_pCopyBufferInfo[1]; pCopyBufferInfo = (VkCopyBufferInfo2*)stack_pCopyBufferInfo; reservedunmarshal_VkCopyBufferInfo2(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyBufferInfo2*)(pCopyBufferInfo), readStreamPtrPtr); if (pCopyBufferInfo) { transform_tohost_VkCopyBufferInfo2(globalstate, (VkCopyBufferInfo2*)(pCopyBufferInfo)); } vk->vkCmdCopyBuffer2KHR((VkCommandBuffer)dispatchHandle, pCopyBufferInfo); android::base::endTrace(); break; } case OP_vkCmdCopyImage2KHR: { android::base::beginTrace("vkCmdCopyImage2KHR subdecode"); const VkCopyImageInfo2* pCopyImageInfo; VkCopyImageInfo2 stack_pCopyImageInfo[1]; pCopyImageInfo = (VkCopyImageInfo2*)stack_pCopyImageInfo; reservedunmarshal_VkCopyImageInfo2(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyImageInfo2*)(pCopyImageInfo), readStreamPtrPtr); if (pCopyImageInfo) { transform_tohost_VkCopyImageInfo2(globalstate, (VkCopyImageInfo2*)(pCopyImageInfo)); } this->on_vkCmdCopyImage2KHR(pool, (VkCommandBuffer)(boxed_dispatchHandle), pCopyImageInfo); android::base::endTrace(); break; } case OP_vkCmdCopyBufferToImage2KHR: { android::base::beginTrace("vkCmdCopyBufferToImage2KHR subdecode"); const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo; VkCopyBufferToImageInfo2 stack_pCopyBufferToImageInfo[1]; pCopyBufferToImageInfo = (VkCopyBufferToImageInfo2*)stack_pCopyBufferToImageInfo; reservedunmarshal_VkCopyBufferToImageInfo2( readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyBufferToImageInfo2*)(pCopyBufferToImageInfo), readStreamPtrPtr); if (pCopyBufferToImageInfo) { transform_tohost_VkCopyBufferToImageInfo2( globalstate, (VkCopyBufferToImageInfo2*)(pCopyBufferToImageInfo)); } this->on_vkCmdCopyBufferToImage2KHR(pool, (VkCommandBuffer)(boxed_dispatchHandle), pCopyBufferToImageInfo, context); android::base::endTrace(); break; } case OP_vkCmdCopyImageToBuffer2KHR: { android::base::beginTrace("vkCmdCopyImageToBuffer2KHR subdecode"); const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo; VkCopyImageToBufferInfo2 stack_pCopyImageToBufferInfo[1]; pCopyImageToBufferInfo = (VkCopyImageToBufferInfo2*)stack_pCopyImageToBufferInfo; reservedunmarshal_VkCopyImageToBufferInfo2( readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyImageToBufferInfo2*)(pCopyImageToBufferInfo), readStreamPtrPtr); if (pCopyImageToBufferInfo) { transform_tohost_VkCopyImageToBufferInfo2( globalstate, (VkCopyImageToBufferInfo2*)(pCopyImageToBufferInfo)); } this->on_vkCmdCopyImageToBuffer2KHR(pool, (VkCommandBuffer)(boxed_dispatchHandle), pCopyImageToBufferInfo); android::base::endTrace(); break; } case OP_vkCmdBlitImage2KHR: { android::base::beginTrace("vkCmdBlitImage2KHR subdecode"); const VkBlitImageInfo2* pBlitImageInfo; VkBlitImageInfo2 stack_pBlitImageInfo[1]; pBlitImageInfo = (VkBlitImageInfo2*)stack_pBlitImageInfo; reservedunmarshal_VkBlitImageInfo2(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBlitImageInfo2*)(pBlitImageInfo), readStreamPtrPtr); if (pBlitImageInfo) { transform_tohost_VkBlitImageInfo2(globalstate, (VkBlitImageInfo2*)(pBlitImageInfo)); } vk->vkCmdBlitImage2KHR((VkCommandBuffer)dispatchHandle, pBlitImageInfo); android::base::endTrace(); break; } case OP_vkCmdResolveImage2KHR: { android::base::beginTrace("vkCmdResolveImage2KHR subdecode"); const VkResolveImageInfo2* pResolveImageInfo; VkResolveImageInfo2 stack_pResolveImageInfo[1]; pResolveImageInfo = (VkResolveImageInfo2*)stack_pResolveImageInfo; reservedunmarshal_VkResolveImageInfo2(readStream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkResolveImageInfo2*)(pResolveImageInfo), readStreamPtrPtr); if (pResolveImageInfo) { transform_tohost_VkResolveImageInfo2(globalstate, (VkResolveImageInfo2*)(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_KHR_maintenance5 case OP_vkCmdBindIndexBuffer2KHR: { android::base::beginTrace("vkCmdBindIndexBuffer2KHR subdecode"); VkBuffer buffer; VkDeviceSize offset; VkDeviceSize size; 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((VkDeviceSize*)&size, *readStreamPtrPtr, sizeof(VkDeviceSize)); *readStreamPtrPtr += sizeof(VkDeviceSize); memcpy((VkIndexType*)&indexType, *readStreamPtrPtr, sizeof(VkIndexType)); *readStreamPtrPtr += sizeof(VkIndexType); vk->vkCmdBindIndexBuffer2KHR((VkCommandBuffer)dispatchHandle, buffer, offset, size, indexType); android::base::endTrace(); break; } #endif #ifdef VK_ANDROID_native_buffer #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_AMD_gpu_shader_half_float #endif #ifdef VK_EXT_texture_compression_astc_hdr #endif #ifdef VK_EXT_depth_clip_enable #endif #ifdef VK_EXT_swapchain_colorspace #endif #ifdef VK_MVK_moltenvk #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_inline_uniform_block #endif #ifdef VK_EXT_shader_stencil_export #endif #ifdef VK_EXT_vertex_attribute_divisor #endif #ifdef VK_EXT_pipeline_creation_feedback #endif #ifdef VK_NV_shader_subgroup_partitioned #endif #ifdef VK_EXT_metal_surface #endif #ifdef VK_EXT_fragment_density_map #endif #ifdef VK_EXT_scalar_block_layout #endif #ifdef VK_EXT_subgroup_size_control #endif #ifdef VK_EXT_tooling_info #endif #ifdef VK_EXT_validation_features #endif #ifdef VK_EXT_provoking_vertex #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_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_host_image_copy #endif #ifdef VK_EXT_swapchain_maintenance1 #endif #ifdef VK_EXT_shader_demote_to_helper_invocation #endif #ifdef VK_EXT_texel_buffer_alignment #endif #ifdef VK_EXT_device_memory_report #endif #ifdef VK_EXT_robustness2 #endif #ifdef VK_EXT_custom_border_color #endif #ifdef VK_EXT_private_data #endif #ifdef VK_EXT_pipeline_creation_cache_control #endif #ifdef VK_EXT_metal_objects #endif #ifdef VK_EXT_graphics_pipeline_library #endif #ifdef VK_EXT_ycbcr_2plane_444_formats #endif #ifdef VK_EXT_image_robustness #endif #ifdef VK_EXT_image_compression_control #endif #ifdef VK_EXT_4444_formats #endif #ifdef VK_EXT_primitive_topology_list_restart #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_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_load_store_op_none #endif #ifdef VK_EXT_image_compression_control_swapchain #endif #ifdef VK_QNX_external_memory_screen_buffer #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; ; }