From 4500e6e460dca068157862b95c7534d7d163c42c Mon Sep 17 00:00:00 2001 From: Jonathan Gray Date: Tue, 1 Sep 2020 12:13:43 +1000 Subject: [PATCH] vulkan: make VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT conditional Only advertise VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT if CLOCK_MONOTONIC_RAW is defined. Fixes the build on OpenBSD which has CLOCK_MONOTONIC but not CLOCK_MONOTONIC_RAW. Fixes: 67a2c1493c0 ("vulkan: Add VK_EXT_calibrated_timestamps extension (radv and anv) [v5]") Signed-off-by: Jonathan Gray Reviewed-by: Jason Ekstrand Part-of: --- src/amd/vulkan/radv_device.c | 14 ++++++++++++++ src/intel/vulkan/anv_device.c | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 9113615607c..b0eba6abe86 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -7931,7 +7931,9 @@ radv_GetDeviceGroupPeerMemoryFeatures( static const VkTimeDomainEXT radv_time_domains[] = { VK_TIME_DOMAIN_DEVICE_EXT, VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT, +#ifdef CLOCK_MONOTONIC_RAW VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT, +#endif }; VkResult radv_GetPhysicalDeviceCalibrateableTimeDomainsEXT( @@ -7958,8 +7960,10 @@ radv_clock_gettime(clockid_t clock_id) int ret; ret = clock_gettime(clock_id, ¤t); +#ifdef CLOCK_MONOTONIC_RAW if (ret < 0 && clock_id == CLOCK_MONOTONIC_RAW) ret = clock_gettime(CLOCK_MONOTONIC, ¤t); +#endif if (ret < 0) return 0; @@ -7979,7 +7983,11 @@ VkResult radv_GetCalibratedTimestampsEXT( uint64_t begin, end; uint64_t max_clock_period = 0; +#ifdef CLOCK_MONOTONIC_RAW begin = radv_clock_gettime(CLOCK_MONOTONIC_RAW); +#else + begin = radv_clock_gettime(CLOCK_MONOTONIC); +#endif for (d = 0; d < timestampCount; d++) { switch (pTimestampInfos[d].timeDomain) { @@ -7994,16 +8002,22 @@ VkResult radv_GetCalibratedTimestampsEXT( max_clock_period = MAX2(max_clock_period, 1); break; +#ifdef CLOCK_MONOTONIC_RAW case VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT: pTimestamps[d] = begin; break; +#endif default: pTimestamps[d] = 0; break; } } +#ifdef CLOCK_MONOTONIC_RAW end = radv_clock_gettime(CLOCK_MONOTONIC_RAW); +#else + end = radv_clock_gettime(CLOCK_MONOTONIC); +#endif /* * The maximum deviation is the sum of the interval over which we diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 7470d0cf17f..789913d57b8 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -4442,7 +4442,9 @@ void anv_DestroyFramebuffer( static const VkTimeDomainEXT anv_time_domains[] = { VK_TIME_DOMAIN_DEVICE_EXT, VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT, +#ifdef CLOCK_MONOTONIC_RAW VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT, +#endif }; VkResult anv_GetPhysicalDeviceCalibrateableTimeDomainsEXT( @@ -4469,8 +4471,10 @@ anv_clock_gettime(clockid_t clock_id) int ret; ret = clock_gettime(clock_id, ¤t); +#ifdef CLOCK_MONOTONIC_RAW if (ret < 0 && clock_id == CLOCK_MONOTONIC_RAW) ret = clock_gettime(CLOCK_MONOTONIC, ¤t); +#endif if (ret < 0) return 0; @@ -4491,7 +4495,11 @@ VkResult anv_GetCalibratedTimestampsEXT( uint64_t begin, end; uint64_t max_clock_period = 0; +#ifdef CLOCK_MONOTONIC_RAW begin = anv_clock_gettime(CLOCK_MONOTONIC_RAW); +#else + begin = anv_clock_gettime(CLOCK_MONOTONIC); +#endif for (d = 0; d < timestampCount; d++) { switch (pTimestampInfos[d].timeDomain) { @@ -4511,16 +4519,22 @@ VkResult anv_GetCalibratedTimestampsEXT( max_clock_period = MAX2(max_clock_period, 1); break; +#ifdef CLOCK_MONOTONIC_RAW case VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT: pTimestamps[d] = begin; break; +#endif default: pTimestamps[d] = 0; break; } } +#ifdef CLOCK_MONOTONIC_RAW end = anv_clock_gettime(CLOCK_MONOTONIC_RAW); +#else + end = anv_clock_gettime(CLOCK_MONOTONIC); +#endif /* * The maximum deviation is the sum of the interval over which we -- 2.30.2