Signed-off-by: Paul Gofman pgofman@codeweavers.com --- This only real problem that the hardcoded value currently causes is broken convert_monotonic_timestamp in Proton Experimental where performance frequency is currently different. While this is not an upstream issue and we may even want to change that in Proton it doesn't seem right for winevulkan to depend on this implementation detail.
dlls/winevulkan/vulkan.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 1070ccec115..f793b907dad 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1355,7 +1355,6 @@ VkResult WINAPI unix_vkGetPhysicalDeviceImageFormatProperties2KHR(VkPhysicalDevi
/* From ntdll/unix/sync.c */ #define NANOSECONDS_IN_A_SECOND 1000000000 -#define TICKSPERSEC 10000000
static inline VkTimeDomainEXT get_performance_counter_time_domain(void) { @@ -1382,7 +1381,17 @@ static VkTimeDomainEXT map_to_host_time_domain(VkTimeDomainEXT domain)
static inline uint64_t convert_monotonic_timestamp(uint64_t value) { - return value / (NANOSECONDS_IN_A_SECOND / TICKSPERSEC); + static LARGE_INTEGER freq; + + if (!freq.QuadPart) + { + LARGE_INTEGER temp; + + RtlQueryPerformanceFrequency(&temp); + InterlockedCompareExchange64(&freq.QuadPart, temp.QuadPart, 0); + } + + return value * freq.QuadPart / NANOSECONDS_IN_A_SECOND; }
static inline uint64_t convert_timestamp(VkTimeDomainEXT host_domain, VkTimeDomainEXT target_domain, uint64_t value)
I realize now this patch doesn't fit the PE conversion which is to be happen now. Please ignore this one.
On 4/19/21 15:35, Paul Gofman wrote:
Signed-off-by: Paul Gofman pgofman@codeweavers.com
This only real problem that the hardcoded value currently causes is broken convert_monotonic_timestamp in Proton Experimental where performance frequency is currently different. While this is not an upstream issue and we may even want to change that in Proton it doesn't seem right for winevulkan to depend on this implementation detail.
dlls/winevulkan/vulkan.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 1070ccec115..f793b907dad 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1355,7 +1355,6 @@ VkResult WINAPI unix_vkGetPhysicalDeviceImageFormatProperties2KHR(VkPhysicalDevi
/* From ntdll/unix/sync.c */ #define NANOSECONDS_IN_A_SECOND 1000000000 -#define TICKSPERSEC 10000000
static inline VkTimeDomainEXT get_performance_counter_time_domain(void) { @@ -1382,7 +1381,17 @@ static VkTimeDomainEXT map_to_host_time_domain(VkTimeDomainEXT domain)
static inline uint64_t convert_monotonic_timestamp(uint64_t value) {
- return value / (NANOSECONDS_IN_A_SECOND / TICKSPERSEC);
- static LARGE_INTEGER freq;
- if (!freq.QuadPart)
- {
LARGE_INTEGER temp;
RtlQueryPerformanceFrequency(&temp);
InterlockedCompareExchange64(&freq.QuadPart, temp.QuadPart, 0);
- }
- return value * freq.QuadPart / NANOSECONDS_IN_A_SECOND;
}
static inline uint64_t convert_timestamp(VkTimeDomainEXT host_domain, VkTimeDomainEXT target_domain, uint64_t value)
Hi Paul,
Doesn't this have some potential problems with overflow?