From: Matthew Netsch Date: Wed, 14 Aug 2019 11:08:32 +0000 (+0530) Subject: Split compute workload into multiple submissions X-Git-Tag: upstream/1.3.5~1811^2^2~11^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=480b7ec6d8cd9a4db49f757128aa328307d574f3;p=platform%2Fupstream%2FVK-GL-CTS.git Split compute workload into multiple submissions Reduces workload per submission Components: Vulkan VK-GL-CTS Issue: 1751 Affects: dEQP-VK.memory_model.message_passing.* Change-Id: Ia9e9b63851b18ae1d5c1b65426ee864d760bf87c --- diff --git a/external/vulkancts/modules/vulkan/memory_model/vktMemoryModelMessagePassing.cpp b/external/vulkancts/modules/vulkan/memory_model/vktMemoryModelMessagePassing.cpp index 093088d..01df093 100644 --- a/external/vulkancts/modules/vulkan/memory_model/vktMemoryModelMessagePassing.cpp +++ b/external/vulkancts/modules/vulkan/memory_model/vktMemoryModelMessagePassing.cpp @@ -1184,113 +1184,119 @@ tcu::TestStatus MemoryModelTestInstance::iterate (void) } const VkQueue queue = m_context.getUniversalQueue(); - Move cmdPool = createCommandPool(vk, device, 0, m_context.getUniversalQueueFamilyIndex()); + Move cmdPool = createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, m_context.getUniversalQueueFamilyIndex()); Move cmdBuffer = allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY); - beginCommandBuffer(vk, *cmdBuffer, 0u); - - vk.cmdFillBuffer(*cmdBuffer, **buffers[2], 0, bufferSizes[2], 0); - - for (deUint32 i = 0; i < 2; ++i) + deUint32 NUM_SUBMITS = 2; + for (deUint32 x = 0; x < NUM_SUBMITS; ++x) { - if (!images[i]) - continue; + beginCommandBuffer(vk, *cmdBuffer, 0u); + if (x == 0) + vk.cmdFillBuffer(*cmdBuffer, **buffers[2], 0, bufferSizes[2], 0); - const VkImageMemoryBarrier imageBarrier = + for (deUint32 i = 0; i < 2; ++i) { - VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType - DE_NULL, // const void* pNext - 0u, // VkAccessFlags srcAccessMask - VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags dstAccessMask - VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout - VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout newLayout - VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex - VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex - **images[i], // VkImage image + if (!images[i]) + continue; + + const VkImageMemoryBarrier imageBarrier = { - VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspectMask - 0u, // uint32_t baseMipLevel - 1u, // uint32_t mipLevels, - 0u, // uint32_t baseArray - 1u, // uint32_t arraySize - } - }; + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType + DE_NULL, // const void* pNext + 0u, // VkAccessFlags srcAccessMask + VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags dstAccessMask + VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout + VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout newLayout + VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex + VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex + **images[i], // VkImage image + { + VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspectMask + 0u, // uint32_t baseMipLevel + 1u, // uint32_t mipLevels, + 0u, // uint32_t baseArray + 1u, // uint32_t arraySize + } + }; - vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, - (VkDependencyFlags)0, - 0, (const VkMemoryBarrier*)DE_NULL, - 0, (const VkBufferMemoryBarrier*)DE_NULL, - 1, &imageBarrier); - } + vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, + (VkDependencyFlags)0, + 0, (const VkMemoryBarrier*)DE_NULL, + 0, (const VkBufferMemoryBarrier*)DE_NULL, + 1, &imageBarrier); + } - vk.cmdBindDescriptorSets(*cmdBuffer, bindPoint, *pipelineLayout, 0u, 1, &*descriptorSet, 0u, DE_NULL); - vk.cmdBindPipeline(*cmdBuffer, bindPoint, *pipeline); + vk.cmdBindDescriptorSets(*cmdBuffer, bindPoint, *pipelineLayout, 0u, 1, &*descriptorSet, 0u, DE_NULL); + vk.cmdBindPipeline(*cmdBuffer, bindPoint, *pipeline); - VkImageSubresourceRange range = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u); - VkClearValue clearColor = makeClearValueColorU32(0,0,0,0); + VkImageSubresourceRange range = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u); + VkClearValue clearColor = makeClearValueColorU32(0,0,0,0); - VkMemoryBarrier memBarrier = - { - VK_STRUCTURE_TYPE_MEMORY_BARRIER, // sType - DE_NULL, // pNext - 0u, // srcAccessMask - 0u, // dstAccessMask - }; + VkMemoryBarrier memBarrier = + { + VK_STRUCTURE_TYPE_MEMORY_BARRIER, // sType + DE_NULL, // pNext + 0u, // srcAccessMask + 0u, // dstAccessMask + }; - for (deUint32 iters = 0; iters < 200; ++iters) - { - for (deUint32 i = 0; i < 2; ++i) + for (deUint32 iters = 0; iters < 100; ++iters) { - if (buffers[i]) - vk.cmdFillBuffer(*cmdBuffer, **buffers[i], 0, bufferSizes[i], 0); - if (images[i]) - vk.cmdClearColorImage(*cmdBuffer, **images[i], VK_IMAGE_LAYOUT_GENERAL, &clearColor.color, 1, &range); - } + for (deUint32 i = 0; i < 2; ++i) + { + if (buffers[i]) + vk.cmdFillBuffer(*cmdBuffer, **buffers[i], 0, bufferSizes[i], 0); + if (images[i]) + vk.cmdClearColorImage(*cmdBuffer, **images[i], VK_IMAGE_LAYOUT_GENERAL, &clearColor.color, 1, &range); + } - memBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - memBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; - vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, allPipelineStages, - 0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL); + memBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + memBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; + vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, allPipelineStages, + 0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL); - if (m_data.stage == STAGE_COMPUTE) - { - vk.cmdDispatch(*cmdBuffer, NUM_WORKGROUP_EACH_DIM, NUM_WORKGROUP_EACH_DIM, 1); - } - else - { - beginRenderPass(vk, *cmdBuffer, *renderPass, *framebuffer, - makeRect2D(DIM*NUM_WORKGROUP_EACH_DIM, DIM*NUM_WORKGROUP_EACH_DIM), - 0, DE_NULL, VK_SUBPASS_CONTENTS_INLINE); - // Draw a point cloud for vertex shader testing, and a single quad for fragment shader testing - if (m_data.stage == STAGE_VERTEX) + if (m_data.stage == STAGE_COMPUTE) { - vk.cmdDraw(*cmdBuffer, DIM*DIM*NUM_WORKGROUP_EACH_DIM*NUM_WORKGROUP_EACH_DIM, 1u, 0u, 0u); + vk.cmdDispatch(*cmdBuffer, NUM_WORKGROUP_EACH_DIM, NUM_WORKGROUP_EACH_DIM, 1); } else { - vk.cmdDraw(*cmdBuffer, 4u, 1u, 0u, 0u); + beginRenderPass(vk, *cmdBuffer, *renderPass, *framebuffer, + makeRect2D(DIM*NUM_WORKGROUP_EACH_DIM, DIM*NUM_WORKGROUP_EACH_DIM), + 0, DE_NULL, VK_SUBPASS_CONTENTS_INLINE); + // Draw a point cloud for vertex shader testing, and a single quad for fragment shader testing + if (m_data.stage == STAGE_VERTEX) + { + vk.cmdDraw(*cmdBuffer, DIM*DIM*NUM_WORKGROUP_EACH_DIM*NUM_WORKGROUP_EACH_DIM, 1u, 0u, 0u); + } + else + { + vk.cmdDraw(*cmdBuffer, 4u, 1u, 0u, 0u); + } + endRenderPass(vk, *cmdBuffer); } - endRenderPass(vk, *cmdBuffer); - } - memBarrier.srcAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; - memBarrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT; - vk.cmdPipelineBarrier(*cmdBuffer, allPipelineStages, VK_PIPELINE_STAGE_TRANSFER_BIT, - 0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL); - } + memBarrier.srcAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; + memBarrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT; + vk.cmdPipelineBarrier(*cmdBuffer, allPipelineStages, VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL); + } - const VkBufferCopy copyParams = - { - (VkDeviceSize)0u, // srcOffset - (VkDeviceSize)0u, // dstOffset - bufferSizes[2] // size - }; + const VkBufferCopy copyParams = + { + (VkDeviceSize)0u, // srcOffset + (VkDeviceSize)0u, // dstOffset + bufferSizes[2] // size + }; + if (x == NUM_SUBMITS - 1) + vk.cmdCopyBuffer(*cmdBuffer, **buffers[2], **copyBuffer, 1, ©Params); - vk.cmdCopyBuffer(*cmdBuffer, **buffers[2], **copyBuffer, 1, ©Params); + endCommandBuffer(vk, *cmdBuffer); - endCommandBuffer(vk, *cmdBuffer); + submitCommandsAndWait(vk, device, queue, cmdBuffer.get()); - submitCommandsAndWait(vk, device, queue, cmdBuffer.get()); + vk.resetCommandBuffer(*cmdBuffer, 0x00000000); + } tcu::TestLog& log = m_context.getTestContext().getLog();