VkDevice: Migrate to using marl::Event::any()
Bug: b/144388391
Change-Id: I5a9c63899fcb1a39c80be25813d1d89ca22b26a8
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/38138
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/Vulkan/VkDevice.cpp b/src/Vulkan/VkDevice.cpp
index 5816683..ae74729 100644
--- a/src/Vulkan/VkDevice.cpp
+++ b/src/Vulkan/VkDevice.cpp
@@ -177,37 +177,27 @@
}
else // At least one fence must be signaled
{
- // Start by quickly checking the status of all fences, as only one is required
+ marl::containers::vector<marl::Event, 8> events;
for(uint32_t i = 0; i < fenceCount; i++)
{
- if(Cast(pFences[i])->getStatus() == VK_SUCCESS) // At least one fence is signaled
- {
- return VK_SUCCESS;
- }
+ events.push_back(Cast(pFences[i])->getEvent());
}
- if(timeout > 0)
+ auto any = marl::Event::any(events.begin(), events.end());
+
+ if(timeout == 0)
{
- for(uint32_t i = 0; i < fenceCount; i++)
- {
- if(infiniteTimeout)
- {
- if(Cast(pFences[i])->wait() == VK_SUCCESS) // At least one fence is signaled
- {
- return VK_SUCCESS;
- }
- }
- else
- {
- if(Cast(pFences[i])->wait(end_ns) == VK_SUCCESS) // At least one fence is signaled
- {
- return VK_SUCCESS;
- }
- }
- }
+ return any.isSignalled() ? VK_SUCCESS : VK_TIMEOUT;
}
-
- return VK_TIMEOUT;
+ else if (infiniteTimeout)
+ {
+ any.wait();
+ return VK_SUCCESS;
+ }
+ else
+ {
+ return any.wait_until(end_ns) ? VK_SUCCESS : VK_TIMEOUT;
+ }
}
}
diff --git a/src/Vulkan/VkFence.hpp b/src/Vulkan/VkFence.hpp
index 4fa8293..586d42f 100644
--- a/src/Vulkan/VkFence.hpp
+++ b/src/Vulkan/VkFence.hpp
@@ -58,6 +58,8 @@
return event.wait_until(timeout) ? VK_SUCCESS : VK_TIMEOUT;
}
+ const marl::Event& getEvent() const { return event; }
+
// TaskEvents compliance
void start() override
{