diff --git a/src/vulkan/runtime/meson.build b/src/vulkan/runtime/meson.build index a49506c45a1..46d47d0ec56 100644 --- a/src/vulkan/runtime/meson.build +++ b/src/vulkan/runtime/meson.build @@ -60,6 +60,8 @@ vulkan_runtime_files = files( 'vk_sync.h', 'vk_sync_binary.c', 'vk_sync_binary.h', + 'vk_sync_dummy.c', + 'vk_sync_dummy.h', 'vk_sync_timeline.c', 'vk_sync_timeline.h', 'vk_synchronization2.c', diff --git a/src/vulkan/runtime/vk_queue.c b/src/vulkan/runtime/vk_queue.c index 6227383423a..4c2c3fdc036 100644 --- a/src/vulkan/runtime/vk_queue.c +++ b/src/vulkan/runtime/vk_queue.c @@ -36,6 +36,7 @@ #include "vk_semaphore.h" #include "vk_sync.h" #include "vk_sync_binary.h" +#include "vk_sync_dummy.h" #include "vk_sync_timeline.h" #include "vk_util.h" @@ -257,6 +258,10 @@ vk_queue_submit_final(struct vk_queue *queue, submit->waits[i].wait_value == 0) continue; + /* Waits on dummy vk_syncs are no-ops */ + if (vk_sync_type_is_dummy(submit->waits[i].sync->type)) + continue; + /* For emulated timelines, we have a binary vk_sync associated with * each time point and pass the binary vk_sync to the driver. */ diff --git a/src/vulkan/runtime/vk_sync_dummy.c b/src/vulkan/runtime/vk_sync_dummy.c new file mode 100644 index 00000000000..1cab72f491b --- /dev/null +++ b/src/vulkan/runtime/vk_sync_dummy.c @@ -0,0 +1,59 @@ +/* + * Copyright © 2021 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "vk_sync_dummy.h" + +static VkResult +vk_sync_dummy_init(struct vk_device *device, + struct vk_sync *sync, + uint64_t initial_value) +{ + return VK_SUCCESS; +} + +static void +vk_sync_dummy_finish(struct vk_device *device, + struct vk_sync *sync) +{ } + +static VkResult +vk_sync_dummy_wait_many(struct vk_device *device, + uint32_t wait_count, + const struct vk_sync_wait *waits, + enum vk_sync_wait_flags wait_flags, + uint64_t abs_timeout_ns) +{ + return VK_SUCCESS; +} + +const struct vk_sync_type vk_sync_dummy_type = { + .size = sizeof(struct vk_sync), + .features = VK_SYNC_FEATURE_BINARY | + VK_SYNC_FEATURE_GPU_WAIT | + VK_SYNC_FEATURE_CPU_WAIT | + VK_SYNC_FEATURE_WAIT_ANY | + VK_SYNC_FEATURE_WAIT_PENDING, + .init = vk_sync_dummy_init, + .finish = vk_sync_dummy_finish, + .wait_many = vk_sync_dummy_wait_many, +}; diff --git a/src/vulkan/runtime/vk_sync_dummy.h b/src/vulkan/runtime/vk_sync_dummy.h new file mode 100644 index 00000000000..55c6f169d30 --- /dev/null +++ b/src/vulkan/runtime/vk_sync_dummy.h @@ -0,0 +1,44 @@ +/* + * Copyright © 2021 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +#ifndef VK_SYNC_DUMMY_H +#define VK_SYNC_DUMMY_H + +#include "vk_sync.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct vk_sync_type vk_sync_dummy_type; + +static inline bool +vk_sync_type_is_dummy(const struct vk_sync_type *type) +{ + return type == &vk_sync_dummy_type; +} + +#ifdef __cplusplus +} +#endif + +#endif /* VK_SYNC_H */