diff options
author | John Zulauf <jzulauf@lunarg.com> | 2018-03-26 14:45:12 -0600 |
---|---|---|
committer | jzulauf-lunarg <32470354+jzulauf-lunarg@users.noreply.github.com> | 2018-03-30 08:44:28 -0600 |
commit | 7109547f83e94b5bec157a45625c09341c31b793 (patch) | |
tree | 2294f4aca0c78721c37e5b555638a5707b2bb317 /tests/vkrenderframework.cpp | |
parent | 1b33d5abb7d71915f0e98ad253178dfd4710b8ea (diff) | |
download | vulkan-validation-layers-7109547f83e94b5bec157a45625c09341c31b793.tar.gz |
tests: Add queue support to command buffer objects
Allow command buffer objects to submit to different queues than the
device default queue, and utilize the extant vk_testing classes.
New method names match the style of the class Vk*Obj method names are in
Google style, vk_testing methods are named consitently with extant
membmer functions.
Change-Id: I3461f78f92818a049c516469d2cdd1c0572d6dcc
Diffstat (limited to 'tests/vkrenderframework.cpp')
-rw-r--r-- | tests/vkrenderframework.cpp | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp index 8bc2fe178..32275c4f1 100644 --- a/tests/vkrenderframework.cpp +++ b/tests/vkrenderframework.cpp @@ -281,7 +281,7 @@ void VkRenderFramework::InitState(VkPhysicalDeviceFeatures *features, const VkCo } m_device = new VkDeviceObj(0, objs[0], m_device_extension_names, features); - m_device->get_device_queue(); + m_device->SetDeviceQueue(); m_depthStencil = new VkDepthStencilObj(m_device); @@ -514,11 +514,15 @@ uint32_t VkDeviceObj::QueueFamilyMatching(VkQueueFlags with, VkQueueFlags withou return UINT32_MAX; } -void VkDeviceObj::get_device_queue() { +void VkDeviceObj::SetDeviceQueue() { ASSERT_NE(true, graphics_queues().empty()); m_queue = graphics_queues()[0]->handle(); } +VkQueueObj *VkDeviceObj::GetDefaultQueue() { + if (graphics_queues().empty()) return nullptr; + return graphics_queues()[0]; +} VkDescriptorSetLayoutObj::VkDescriptorSetLayoutObj(const VkDeviceObj *device, const std::vector<VkDescriptorSetLayoutBinding> &descriptor_set_bindings, VkDescriptorSetLayoutCreateFlags flags) { @@ -1359,8 +1363,15 @@ VkResult VkPipelineObj::CreateVKPipeline(VkPipelineLayout layout, VkRenderPass r return init_try(*m_device, *gp_ci); } -VkCommandBufferObj::VkCommandBufferObj(VkDeviceObj *device, VkCommandPoolObj *pool, VkCommandBufferLevel level) { +VkCommandBufferObj::VkCommandBufferObj(VkDeviceObj *device, VkCommandPoolObj *pool, VkCommandBufferLevel level, VkQueueObj *queue) { m_device = device; + if (queue) { + m_queue = queue; + } else { + m_queue = m_device->GetDefaultQueue(); + } + assert(m_queue); + auto create_info = vk_testing::CommandBuffer::create_info(pool->handle()); create_info.level = level; init(*device, create_info); @@ -1477,35 +1488,24 @@ void VkCommandBufferObj::Draw(uint32_t vertexCount, uint32_t instanceCount, uint } void VkCommandBufferObj::QueueCommandBuffer(bool checkSuccess) { - VkFence nullFence = {VK_NULL_HANDLE}; + VkFenceObj nullFence; QueueCommandBuffer(nullFence, checkSuccess); } -void VkCommandBufferObj::QueueCommandBuffer(VkFence fence, bool checkSuccess) { +void VkCommandBufferObj::QueueCommandBuffer(const VkFenceObj &fence, bool checkSuccess) { VkResult err = VK_SUCCESS; - // submit the command buffer to the universal queue - VkSubmitInfo submit_info; - submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; - submit_info.pNext = NULL; - submit_info.waitSemaphoreCount = 0; - submit_info.pWaitSemaphores = NULL; - submit_info.pWaitDstStageMask = NULL; - submit_info.commandBufferCount = 1; - submit_info.pCommandBuffers = &handle(); - submit_info.signalSemaphoreCount = 0; - submit_info.pSignalSemaphores = NULL; - - err = vkQueueSubmit(m_device->m_queue, 1, &submit_info, fence); + err = m_queue->submit(*this, fence, checkSuccess); if (checkSuccess) { ASSERT_VK_SUCCESS(err); } - err = vkQueueWaitIdle(m_device->m_queue); + err = m_queue->wait(); if (checkSuccess) { ASSERT_VK_SUCCESS(err); } + // TODO: Determine if we really want this serialization here // Wait for work to finish before cleaning up. vkDeviceWaitIdle(m_device->device()); } |