Merge pull request #1345 from billhollings/xc-125
Support Xcode 12.5
diff --git a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
index 68a6080..d99d9c6 100644
--- a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
+++ b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
@@ -27,10 +27,10 @@
#endif // __cplusplus
#include "mvk_vulkan.h"
+#include <IOSurface/IOSurfaceRef.h>
#ifdef __OBJC__
#import <Metal/Metal.h>
-#import <IOSurface/IOSurfaceRef.h>
#else
typedef unsigned long MTLLanguageVersion;
#endif
@@ -973,14 +973,14 @@
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceMetalFeaturesMVK)(VkPhysicalDevice physicalDevice, MVKPhysicalDeviceMetalFeatures* pMetalFeatures, size_t* pMetalFeaturesSize);
typedef VkResult (VKAPI_PTR *PFN_vkGetPerformanceStatisticsMVK)(VkDevice device, MVKPerformanceStatistics* pPerf, size_t* pPerfSize);
typedef void (VKAPI_PTR *PFN_vkGetVersionStringsMVK)(char* pMoltenVersionStringBuffer, uint32_t moltenVersionStringBufferLength, char* pVulkanVersionStringBuffer, uint32_t vulkanVersionStringBufferLength);
+typedef VkResult (VKAPI_PTR *PFN_vkUseIOSurfaceMVK)(VkImage image, IOSurfaceRef ioSurface);
+typedef void (VKAPI_PTR *PFN_vkGetIOSurfaceMVK)(VkImage image, IOSurfaceRef* pIOSurface);
#ifdef __OBJC__
typedef void (VKAPI_PTR *PFN_vkGetMTLDeviceMVK)(VkPhysicalDevice physicalDevice, id<MTLDevice>* pMTLDevice);
typedef VkResult (VKAPI_PTR *PFN_vkSetMTLTextureMVK)(VkImage image, id<MTLTexture> mtlTexture);
typedef void (VKAPI_PTR *PFN_vkGetMTLTextureMVK)(VkImage image, id<MTLTexture>* pMTLTexture);
typedef void (VKAPI_PTR *PFN_vkGetMTLBufferMVK)(VkBuffer buffer, id<MTLBuffer>* pMTLBuffer);
-typedef VkResult (VKAPI_PTR *PFN_vkUseIOSurfaceMVK)(VkImage image, IOSurfaceRef ioSurface);
-typedef void (VKAPI_PTR *PFN_vkGetIOSurfaceMVK)(VkImage image, IOSurfaceRef* pIOSurface);
#endif // __OBJC__
@@ -1225,6 +1225,8 @@
VkBuffer buffer,
id<MTLBuffer>* pMTLBuffer);
+#endif // __OBJC__
+
/**
* Indicates that a VkImage should use an IOSurface to underlay the Metal texture.
*
@@ -1274,8 +1276,6 @@
VkImage image,
IOSurfaceRef* pIOSurface);
-#endif // __OBJC__
-
#pragma mark -
#pragma mark Shaders
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptor.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptor.mm
index 1f50b62..8a199c5 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptor.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptor.mm
@@ -109,7 +109,7 @@
mvk::MSLResourceBinding rb; \
auto& rbb = rb.resourceBinding; \
rbb.stage = spvExecModels[stage]; \
- rbb.basetype = SPIRV_CROSS_NAMESPACE_OVERRIDE::SPIRType::spvRezType; \
+ rbb.basetype = SPIRV_CROSS_NAMESPACE::SPIRType::spvRezType; \
rbb.desc_set = descriptorSetIndex; \
rbb.binding = bindingIndex; \
rbb.count = count; \
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm b/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm
index 012d753..63700f8 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm
@@ -426,28 +426,34 @@
VkResult MVKSwapchain::getPastPresentationTiming(uint32_t *pCount, VkPastPresentationTimingGOOGLE *pPresentationTimings) {
if (_device->getConfigurationResult() != VK_SUCCESS) { return _device->getConfigurationResult(); }
+ VkResult res = VK_SUCCESS;
+
std::lock_guard<std::mutex> lock(_presentHistoryLock);
- if (pCount && pPresentationTimings == nullptr) {
+ if (pPresentationTimings == nullptr) {
*pCount = _presentHistoryCount;
- } else if (pPresentationTimings) {
- uint32_t index = _presentHistoryHeadIndex;
+ } else {
uint32_t countRemaining = std::min(_presentHistoryCount, *pCount);
uint32_t outIndex = 0;
+
+ res = (*pCount >= _presentHistoryCount) ? VK_SUCCESS : VK_INCOMPLETE;
+ *pCount = countRemaining;
+
while (countRemaining > 0) {
- pPresentationTimings[outIndex] = _presentTimingHistory[index];
+ pPresentationTimings[outIndex] = _presentTimingHistory[_presentHistoryHeadIndex];
countRemaining--;
- index = (index + 1) % kMaxPresentationHistory;
+ _presentHistoryCount--;
+ _presentHistoryHeadIndex = (_presentHistoryHeadIndex + 1) % kMaxPresentationHistory;
outIndex++;
}
}
- return VK_SUCCESS;
+
+ return res;
}
void MVKSwapchain::recordPresentTime(MVKPresentTimingInfo presentTimingInfo, uint64_t actualPresentTime) {
std::lock_guard<std::mutex> lock(_presentHistoryLock);
if (_presentHistoryCount < kMaxPresentationHistory) {
_presentHistoryCount++;
- _presentHistoryHeadIndex = 0;
} else {
_presentHistoryHeadIndex = (_presentHistoryHeadIndex + 1) % kMaxPresentationHistory;
}