mirror of
https://git.h3cjp.net/H3cJP/citra.git
synced 2024-12-27 05:36:42 +00:00
vulkan_common: promote timeline semaphore usage to core
This commit is contained in:
parent
f4b5570e7c
commit
a948ab3e48
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue