forked from eden-emu/eden
		
	vulkan_common: promote timeline semaphore usage to core
This commit is contained in:
		
							parent
							
								
									33d9604ed2
								
							
						
					
					
						commit
						63b830fd41
					
				
					 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; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Liam
						Liam