58 lines
2.2 KiB
C++
58 lines
2.2 KiB
C++
// Manual inline for
|
|
// void VkEncoder::vkQueueFlushCommandsGOOGLE( VkQueue queue, VkCommandBuffer commandBuffer, VkDeviceSize dataSize, const void* pData, uint32_t doLock);
|
|
|
|
// We won't use the lock if this command is used (VulkanQueueSubmitWithCommands is enabled)
|
|
(void)doLock;
|
|
|
|
auto stream = mImpl->stream();
|
|
auto pool = mImpl->pool();
|
|
VkQueue local_queue;
|
|
VkCommandBuffer local_commandBuffer;
|
|
VkDeviceSize local_dataSize;
|
|
void* local_pData;
|
|
local_queue = queue;
|
|
local_commandBuffer = commandBuffer;
|
|
local_dataSize = dataSize;
|
|
// Avoiding deepcopy for pData
|
|
local_pData = (void*)pData;
|
|
size_t count = 0;
|
|
size_t* countPtr = &count;
|
|
{
|
|
uint64_t cgen_var_1405;
|
|
*countPtr += 1 * 8;
|
|
uint64_t cgen_var_1406;
|
|
*countPtr += 1 * 8;
|
|
*countPtr += sizeof(VkDeviceSize);
|
|
*countPtr += ((dataSize)) * sizeof(uint8_t);
|
|
}
|
|
bool queueSubmitWithCommandsEnabled = sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
|
|
uint32_t packetSize_vkQueueFlushCommandsGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
|
|
uint8_t* streamPtr = stream->reserve(packetSize_vkQueueFlushCommandsGOOGLE - local_dataSize);
|
|
uint8_t** streamPtrPtr = &streamPtr;
|
|
uint32_t opcode_vkQueueFlushCommandsGOOGLE = OP_vkQueueFlushCommandsGOOGLE;
|
|
uint32_t seqno = ResourceTracker::nextSeqno();
|
|
memcpy(streamPtr, &opcode_vkQueueFlushCommandsGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
|
|
memcpy(streamPtr, &packetSize_vkQueueFlushCommandsGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
|
|
memcpy(streamPtr, &seqno, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
|
|
uint64_t cgen_var_1407;
|
|
*&cgen_var_1407 = get_host_u64_VkQueue((*&local_queue));
|
|
memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1407, 1 * 8);
|
|
*streamPtrPtr += 1 * 8;
|
|
uint64_t cgen_var_1408;
|
|
*&cgen_var_1408 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
|
|
memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1408, 1 * 8);
|
|
*streamPtrPtr += 1 * 8;
|
|
memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dataSize, sizeof(VkDeviceSize));
|
|
*streamPtrPtr += sizeof(VkDeviceSize);
|
|
|
|
AEMU_SCOPED_TRACE("vkQueueFlush large xfer");
|
|
stream->flush();
|
|
stream->writeLarge(local_pData, dataSize);
|
|
|
|
++encodeCount;;
|
|
if (0 == encodeCount % POOL_CLEAR_INTERVAL)
|
|
{
|
|
pool->freeAll();
|
|
stream->clearPool();
|
|
}
|