vulkan_common: promote timeline semaphore usage to core

master
Liam 2022-12-02 16:47:33 +07:00
parent f4b5570e7c
commit a948ab3e48
3 changed files with 15 additions and 9 deletions

@ -80,7 +80,6 @@ constexpr std::array REQUIRED_EXTENSIONS{
// Core in 1.2, but required due to use of extension methods, // Core in 1.2, but required due to use of extension methods,
// and well-supported by drivers // and well-supported by drivers
VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME,
VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME,
VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME,
#ifdef _WIN32 #ifdef _WIN32

@ -180,7 +180,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
X(vkGetQueryPoolResults); X(vkGetQueryPoolResults);
X(vkGetPipelineExecutablePropertiesKHR); X(vkGetPipelineExecutablePropertiesKHR);
X(vkGetPipelineExecutableStatisticsKHR); X(vkGetPipelineExecutableStatisticsKHR);
X(vkGetSemaphoreCounterValueKHR); X(vkGetSemaphoreCounterValue);
X(vkMapMemory); X(vkMapMemory);
X(vkQueueSubmit); X(vkQueueSubmit);
X(vkResetFences); X(vkResetFences);
@ -191,7 +191,14 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
X(vkUpdateDescriptorSetWithTemplateKHR); X(vkUpdateDescriptorSetWithTemplateKHR);
X(vkUpdateDescriptorSets); X(vkUpdateDescriptorSets);
X(vkWaitForFences); X(vkWaitForFences);
X(vkWaitSemaphoresKHR); X(vkWaitSemaphores);
// Support for timeline semaphores is mandatory in Vulkan 1.2
if (!dld.vkGetSemaphoreCounterValue) {
Proc(dld.vkGetSemaphoreCounterValue, dld, "vkGetSemaphoreCounterValue", device);
Proc(dld.vkWaitForFences, dld, "vkWaitForFencesKHR", device);
Proc(dld.vkWaitSemaphores, dld, "vkWaitSemaphoresKHR", device);
}
#undef X #undef X
} }

@ -297,7 +297,7 @@ struct DeviceDispatch : InstanceDispatch {
PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR{}; PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR{};
PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR{}; PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR{};
PFN_vkGetQueryPoolResults vkGetQueryPoolResults{}; PFN_vkGetQueryPoolResults vkGetQueryPoolResults{};
PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR{}; PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue{};
PFN_vkMapMemory vkMapMemory{}; PFN_vkMapMemory vkMapMemory{};
PFN_vkQueueSubmit vkQueueSubmit{}; PFN_vkQueueSubmit vkQueueSubmit{};
PFN_vkResetFences vkResetFences{}; PFN_vkResetFences vkResetFences{};
@ -308,7 +308,7 @@ struct DeviceDispatch : InstanceDispatch {
PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR{}; PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR{};
PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets{}; PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets{};
PFN_vkWaitForFences vkWaitForFences{}; PFN_vkWaitForFences vkWaitForFences{};
PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR{}; PFN_vkWaitSemaphores vkWaitSemaphores{};
}; };
/// Loads instance agnostic function pointers. /// Loads instance agnostic function pointers.
@ -766,7 +766,7 @@ public:
[[nodiscard]] u64 GetCounter() const { [[nodiscard]] u64 GetCounter() const {
u64 value; u64 value;
Check(dld->vkGetSemaphoreCounterValueKHR(owner, handle, &value)); Check(dld->vkGetSemaphoreCounterValue(owner, handle, &value));
return value; return value;
} }
@ -778,15 +778,15 @@ public:
* @return True on successful wait, false on timeout * @return True on successful wait, false on timeout
*/ */
bool Wait(u64 value, u64 timeout = std::numeric_limits<u64>::max()) const { bool Wait(u64 value, u64 timeout = std::numeric_limits<u64>::max()) const {
const VkSemaphoreWaitInfoKHR wait_info{ const VkSemaphoreWaitInfo wait_info{
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR, .sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
.pNext = nullptr, .pNext = nullptr,
.flags = 0, .flags = 0,
.semaphoreCount = 1, .semaphoreCount = 1,
.pSemaphores = &handle, .pSemaphores = &handle,
.pValues = &value, .pValues = &value,
}; };
const VkResult result = dld->vkWaitSemaphoresKHR(owner, &wait_info, timeout); const VkResult result = dld->vkWaitSemaphores(owner, &wait_info, timeout);
switch (result) { switch (result) {
case VK_SUCCESS: case VK_SUCCESS:
return true; return true;