vulkan/wsi: Set a proper pWaitDstStageMask on the dummy submit
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 16 Nov 2017 17:18:48 +0000 (09:18 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 4 Dec 2017 18:04:19 +0000 (10:04 -0800)
Neither mesa driver really cares, but we should set it none the less for
the sake of correctness.

Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Chad Versace <chadversary@chromium.org>
src/vulkan/wsi/wsi_common.c

index 4f6648f988f3d2110ab71c8a2d142bd77d2299d3..e5a9a28d34732eaa2c5b507b9856c8c3e99e336e 100644 (file)
@@ -542,14 +542,31 @@ wsi_common_queue_present(const struct wsi_device *wsi,
          .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
          .pNext = NULL,
       };
+      VkPipelineStageFlags *stage_flags = NULL;
       if (i == 0) {
          /* We only need/want to wait on semaphores once.  After that, we're
           * guaranteed ordering since it all happens on the same queue.
           */
          submit_info.waitSemaphoreCount = pPresentInfo->waitSemaphoreCount,
          submit_info.pWaitSemaphores = pPresentInfo->pWaitSemaphores,
+
+         /* Set up the pWaitDstStageMasks */
+         stage_flags = vk_alloc(&swapchain->alloc,
+                                sizeof(VkPipelineStageFlags) *
+                                pPresentInfo->waitSemaphoreCount,
+                                8,
+                                VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
+         if (!stage_flags) {
+            result = VK_ERROR_OUT_OF_HOST_MEMORY;
+            goto fail_present;
+         }
+         for (uint32_t s = 0; s < pPresentInfo->waitSemaphoreCount; s++)
+            stage_flags[s] = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT;
+
+         submit_info.pWaitDstStageMask = stage_flags;
       }
       result = wsi->QueueSubmit(queue, 1, &submit_info, swapchain->fences[0]);
+      vk_free(&swapchain->alloc, stage_flags);
       if (result != VK_SUCCESS)
          goto fail_present;