From e02d81072c32d534aad4d608dea5d6dc5ceb2000 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: (cherry picked from commit 4500e6e460dca068157862b95c7534d7d163c42c) --- .pick_status.json | 2 +- src/amd/vulkan/radv_device.c | 14 ++++++++++++++ src/intel/vulkan/anv_device.c | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 6198198fd51..2d402385aab 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3316,7 +3316,7 @@ "description": "vulkan: make VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT conditional", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "67a2c1493c068281936fecba9fa6784becf08f8e" }, diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 471812745d7..745ef636ae1 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -7779,7 +7779,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( @@ -7806,8 +7808,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; @@ -7827,7 +7831,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) { @@ -7842,16 +7850,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 1f521e93bf0..ebb102e8ded 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -4403,7 +4403,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( @@ -4430,8 +4432,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; @@ -4452,7 +4456,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) { @@ -4472,16 +4480,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