Commit 69e46942 by Michael Spang Committed by Commit Bot

Vulkan: Add semaphores test to VulkanExternalImageTest

Add a more substantial test that uses semaphores to VulkanExternalImageTest. It's still just a clear in GL, which exposed a bug that a staged clear wasn't be flushed by a call to glSignalSemaphoreEXT. Bug: angleproject:3289 Change-Id: Id938eaf2c8c20cb0ae9fb948fbfcf3448980b577 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2195684 Commit-Queue: Michael Spang <spang@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 7c6a30c2
...@@ -193,6 +193,8 @@ angle::Result SemaphoreVk::signal(gl::Context *context, ...@@ -193,6 +193,8 @@ angle::Result SemaphoreVk::signal(gl::Context *context,
layout = image.getCurrentImageLayout(); layout = image.getCurrentImageLayout();
} }
ANGLE_TRY(textureVk->ensureImageInitialized(contextVk, ImageMipLevels::EnabledLevels));
vk::CommandBuffer *commandBuffer; vk::CommandBuffer *commandBuffer;
ANGLE_TRY(contextVk->endRenderPassAndGetCommandBuffer(&commandBuffer)); ANGLE_TRY(contextVk->endRenderPassAndGetCommandBuffer(&commandBuffer));
......
...@@ -66,11 +66,40 @@ class VulkanExternalHelper ...@@ -66,11 +66,40 @@ class VulkanExternalHelper
VkResult createSemaphoreZirconEvent(VkSemaphore *semaphore); VkResult createSemaphoreZirconEvent(VkSemaphore *semaphore);
VkResult exportSemaphoreZirconEvent(VkSemaphore semaphore, zx_handle_t *event); VkResult exportSemaphoreZirconEvent(VkSemaphore semaphore, zx_handle_t *event);
// Performs a queue ownership transfer to VK_QUEUE_FAMILY_EXTERNAL on an
// image owned by our instance. The current image layout must be |oldLayout|
// and will be in |newLayout| after the memory barrier. |semaphore|
// will be signaled upon completion of the release operation.
void releaseImageAndSignalSemaphore(VkImage image,
VkImageLayout oldLayout,
VkImageLayout newLayout,
VkSemaphore semaphore);
// Performs a queue ownership transfer from VK_QUEUE_FAMILY_EXTERNAL on an
// image owned by an external instance. The current image layout must be
// |oldLayout| and will be in |newLayout| after the memory barrier. The
// barrier will wait for |semaphore|.
void waitSemaphoreAndAcquireImage(VkImage image,
VkImageLayout oldLayout,
VkImageLayout newLayout,
VkSemaphore semaphore);
// Copies pixels out of an image. Currently only VK_FORMAT_R8G8B8A8_UNORM
// and VK_FORMAT_B8G8R8A8_UNORM formats are supported.
void readPixels(VkImage srcImage,
VkImageLayout srcImageLayout,
VkFormat srcImageFormat,
VkOffset3D imageOffset,
VkExtent3D imageExtent,
void *pixels,
size_t pixelsSize);
private: private:
VkInstance mInstance = VK_NULL_HANDLE; VkInstance mInstance = VK_NULL_HANDLE;
VkPhysicalDevice mPhysicalDevice = VK_NULL_HANDLE; VkPhysicalDevice mPhysicalDevice = VK_NULL_HANDLE;
VkDevice mDevice = VK_NULL_HANDLE; VkDevice mDevice = VK_NULL_HANDLE;
VkQueue mGraphicsQueue = VK_NULL_HANDLE; VkQueue mGraphicsQueue = VK_NULL_HANDLE;
VkCommandPool mCommandPool = VK_NULL_HANDLE;
VkPhysicalDeviceMemoryProperties mMemoryProperties = {}; VkPhysicalDeviceMemoryProperties mMemoryProperties = {};
...@@ -85,8 +114,9 @@ class VulkanExternalHelper ...@@ -85,8 +114,9 @@ class VulkanExternalHelper
PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = nullptr; PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = nullptr;
PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR = nullptr; PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR = nullptr;
PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR
vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = nullptr; vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = nullptr;
PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA = nullptr; PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA = nullptr;
PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA = nullptr;
}; };
} // namespace angle } // namespace angle
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment