If a client creates a semaphore, exports it, and then re-imports it back into the device, this can trick our semaphore reset logic. When this happens, we end up with two different vk_sync structs that have the same underlying payload so if one is used as the signal and one is used as the wait of the same submit, we'll end up resetting it because we think they're different, causing us to lose the signal. We already have the ability to handle this for the threaded case by moving the semaphore payload into a new vk_sync which we then destroy after we're done submitting to the driver. Use this path for shared semaphores in the immediate case so we can just wait and signal without worrying about the reset. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13805 Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37149>