-
[vulkan]: Support multiple external semaphore implementations. · 2aa80df1David 'Digit' Turner authored
This CL refactors the implementation of VkSemaphore objects in the following way: - Add the ability to support several external handle types concurrently. Before this CL, each platform could support a single handle type (e.g. on Linux, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT only). The changes here will allow future CLs to support more than one type per platform (e.g. the Linux implementation may support OPAQUE_FD_BIT as well as SYNC_FD_BIT at the same time). - Better implementation of temporary imports. In particular, the following sequence now works properly: 1) Create exportable semaphore A. 2) Export A to an external handle/descriptor. 3) Signal A. 4) Temporarily import _another_ handle into A. 5) A.wait() // waits on the temporary payload, then discard it. Before the CL, A would end up, incorrectly, unsignalled. Because the export operation created an External instance that held the payload modified in 3), which was then discarded after the wait() in 5). - Improved and consistent handling of errors during import/export operations, through the use of templates. + Add a technical note in VkSemaphore.h explaining how everything works, since there are several subtle points in the spec. Bug: b/140421736 Change-Id: I9b6935db3238fec7af8e0c81666e2f5c72075756 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/39880Tested-by:David Turner <digit@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Kokoro-Presubmit: David Turner <digit@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com>
2aa80df1
×