Support Xcode 14, macOS 13, and iOS/tvOS 16.
- Update minimum Xcode deployment targets to macOS 10.13, iOS 11, and tvOS 11,
to avoid Xcode build warnings.
- Add support for MTLLanguageVersion3_0 enumeration.
- Build efficiencies:
- Build scripts create_dylib.sh and gen_moltenvk_rev_hdr.sh
only run if build dependencies require it.
- Packaging and copy_to_staging.sh scripts are too complex to define dependencies,
and are fast, so configured to run every time, to avoid build warning.
- Replace use of deprecated sprintf() with snprintf().
- Replace use of deprecated kIOMasterPortDefault with kIOMainPortDefault.
- Support old-style GPU debug capture only if building for earlier minimum
deployment targets, to avoid deprecation warning.
- Update minimum Xcode deployment targets of Cube demo to macOS 10.14, iOS 12,
and tvOS 12, to avoid Xcode build warning regarding MTLSharedEvent in .
- Update README.md document regarding minimum Xcode deployment targets.
diff --git a/Demos/Cube/Cube.xcodeproj/project.pbxproj b/Demos/Cube/Cube.xcodeproj/project.pbxproj
index 3f3a5c0..03e8f2a 100644
--- a/Demos/Cube/Cube.xcodeproj/project.pbxproj
+++ b/Demos/Cube/Cube.xcodeproj/project.pbxproj
@@ -353,7 +353,7 @@
MARKETING_VERSION = 1;
PRODUCT_NAME = Cube;
SDKROOT = appletvos;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
};
name = Debug;
};
@@ -372,7 +372,7 @@
MARKETING_VERSION = 1;
PRODUCT_NAME = Cube;
SDKROOT = appletvos;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
};
name = Release;
};
@@ -387,7 +387,7 @@
MVK_SAMP_CUBE,
);
INFOPLIST_FILE = "$(SRCROOT)/macOS/Info.plist";
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
PRODUCT_NAME = Cube;
SDKROOT = macosx;
};
@@ -404,7 +404,7 @@
MVK_SAMP_CUBE,
);
INFOPLIST_FILE = "$(SRCROOT)/macOS/Info.plist";
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
PRODUCT_NAME = Cube;
SDKROOT = macosx;
};
@@ -423,7 +423,7 @@
MVK_SAMP_CUBE,
);
INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
MARKETING_VERSION = 1;
PRODUCT_NAME = Cube;
@@ -446,7 +446,7 @@
MVK_SAMP_CUBE,
);
INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
MARKETING_VERSION = 1;
PRODUCT_NAME = Cube;
diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md
index dfdbc27..e3b9683 100644
--- a/Docs/Whats_New.md
+++ b/Docs/Whats_New.md
@@ -20,8 +20,9 @@
- Add support for extensions:
- `VK_EXT_metal_objects`
-- Reducing redundant state changes to improve commend encoding performance.
-
+- Reducing redundant state changes to improve command encoding performance.
+- Update minimum Xcode deployment targets to macOS 10.13, iOS 11, and tvOS 11,
+ to avoid Xcode build warnings in Xcode 14.
MoltenVK 1.1.10
diff --git a/ExternalDependencies.xcodeproj/project.pbxproj b/ExternalDependencies.xcodeproj/project.pbxproj
index 7e7c1ef..0978079 100644
--- a/ExternalDependencies.xcodeproj/project.pbxproj
+++ b/ExternalDependencies.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 48;
+ objectVersion = 54;
objects = {
/* Begin PBXAggregateTarget section */
@@ -4095,6 +4095,7 @@
/* Begin PBXShellScriptBuildPhase section */
A9194DE724E8431600FB127B /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4113,6 +4114,7 @@
};
A9194DEB24E85ABC00FB127B /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4131,6 +4133,7 @@
};
A9194DEC24E884FC00FB127B /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4149,6 +4152,7 @@
};
A9194DED24E8851900FB127B /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4167,6 +4171,7 @@
};
A9194DEE24E8852B00FB127B /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4185,6 +4190,7 @@
};
A9194DEF24E8853B00FB127B /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4203,6 +4209,7 @@
};
A9194DF024E8854D00FB127B /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4221,6 +4228,7 @@
};
A9194DF124E8855F00FB127B /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4239,6 +4247,7 @@
};
A9194DF224E8856E00FB127B /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4257,6 +4266,7 @@
};
A9194DF624E8990C00FB127B /* Create XCFramework */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -4275,6 +4285,7 @@
};
A9FC5F8B249DB48D003CB086 /* Package Finish */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -5614,6 +5625,7 @@
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
@@ -5623,11 +5635,11 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_PARAMETER = YES;
GCC_WARN_UNUSED_VARIABLE = NO;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.13;
SKIP_INSTALL = YES;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 11.0;
};
name = Debug;
};
@@ -5663,6 +5675,7 @@
GCC_PREPROCESSOR_DEFINITIONS = "NDEBUG=1";
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
@@ -5672,11 +5685,11 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_PARAMETER = YES;
GCC_WARN_UNUSED_VARIABLE = NO;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.13;
SKIP_INSTALL = YES;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 11.0;
VALIDATE_PRODUCT = YES;
};
name = Release;
diff --git a/MoltenVK/MoltenVK.xcodeproj/project.pbxproj b/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
index adb9bb2..defec76 100644
--- a/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
+++ b/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 48;
+ objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@@ -1148,9 +1148,11 @@
files = (
);
inputPaths = (
+ "${BUILT_PRODUCTS_DIR}/lib${PRODUCT_NAME}.a",
);
name = "Create Dynamic Library";
outputPaths = (
+ "${BUILT_PRODUCTS_DIR}/dynamic/lib${PRODUCT_NAME}.dylib",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -1162,9 +1164,11 @@
files = (
);
inputPaths = (
+ "${BUILT_PRODUCTS_DIR}/lib${PRODUCT_NAME}.a",
);
name = "Create Dynamic Library";
outputPaths = (
+ "${BUILT_PRODUCTS_DIR}/dynamic/lib${PRODUCT_NAME}.dylib",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -1175,10 +1179,14 @@
buildActionMask = 2147483647;
files = (
);
+ inputFileListPaths = (
+ );
inputPaths = (
+ "${BUILT_PRODUCTS_DIR}/lib${PRODUCT_NAME}.a",
);
name = "Create Dynamic Library";
outputPaths = (
+ "${BUILT_PRODUCTS_DIR}/dynamic/lib${PRODUCT_NAME}.dylib",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -1197,6 +1205,7 @@
outputFileListPaths = (
);
outputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/mvkGitRevDerived.h",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -1215,6 +1224,7 @@
outputFileListPaths = (
);
outputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/mvkGitRevDerived.h",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -1233,6 +1243,7 @@
outputFileListPaths = (
);
outputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/mvkGitRevDerived.h",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -1240,6 +1251,7 @@
};
A9CBBFEF24F89F5F006D41EF /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -1258,6 +1270,7 @@
};
A9CBBFF124F89F79006D41EF /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -1276,6 +1289,7 @@
};
A9CBBFF224F89F87006D41EF /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -1592,9 +1606,9 @@
"\"$(SRCROOT)/../External/cereal/include\"",
"\"${BUILT_PRODUCTS_DIR}\"",
);
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.13;
MTL_ENABLE_DEBUG_INFO = YES;
MVK_HIDE_VULKAN_SYMBOLS = 0;
MVK_SKIP_DYLIB = "";
@@ -1603,7 +1617,7 @@
PRELINK_LIBS = "${CONFIGURATION_BUILD_DIR}/libMoltenVKShaderConverter.a";
PRODUCT_NAME = MoltenVK;
SKIP_INSTALL = YES;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 11.0;
WARNING_CFLAGS = "-Wreorder";
};
name = Debug;
@@ -1665,9 +1679,9 @@
"\"$(SRCROOT)/../External/cereal/include\"",
"\"${BUILT_PRODUCTS_DIR}\"",
);
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.13;
MTL_ENABLE_DEBUG_INFO = NO;
MVK_HIDE_VULKAN_SYMBOLS = 0;
MVK_SKIP_DYLIB = "";
@@ -1676,7 +1690,7 @@
PRELINK_LIBS = "${CONFIGURATION_BUILD_DIR}/libMoltenVKShaderConverter.a";
PRODUCT_NAME = MoltenVK;
SKIP_INSTALL = YES;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 11.0;
VALIDATE_PRODUCT = YES;
WARNING_CFLAGS = "-Wreorder";
};
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
index 2926b2a..827ca70 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
@@ -1354,6 +1354,11 @@
_metalFeatures.mslVersionEnum = MTLLanguageVersion2_4;
}
#endif
+#if MVK_XCODE_14
+ if ( mvkOSVersionIsAtLeast(16.0) ) {
+ _metalFeatures.mslVersionEnum = MTLLanguageVersion3_0;
+ }
+#endif
#endif
@@ -1463,6 +1468,11 @@
_metalFeatures.mslVersionEnum = MTLLanguageVersion2_4;
}
#endif
+#if MVK_XCODE_14
+ if ( mvkOSVersionIsAtLeast(16.0) ) {
+ _metalFeatures.mslVersionEnum = MTLLanguageVersion3_0;
+ }
+#endif
#endif
@@ -1543,6 +1553,11 @@
_metalFeatures.mslVersionEnum = MTLLanguageVersion2_4;
}
#endif
+#if MVK_XCODE_14
+ if ( mvkOSVersionIsAtLeast(13.0) ) {
+ _metalFeatures.mslVersionEnum = MTLLanguageVersion3_0;
+ }
+#endif
// This is an Apple GPU--treat it accordingly.
if (supportsMTLGPUFamily(Apple1)) {
@@ -1643,6 +1658,11 @@
_metalFeatures.mslVersion = SPIRV_CROSS_NAMESPACE::CompilerMSL::Options::make_msl_version(maj, min);
switch (_metalFeatures.mslVersionEnum) {
+#if MVK_XCODE_14
+ case MTLLanguageVersion3_0:
+ setMSLVersion(3, 0);
+ break;
+#endif
#if MVK_XCODE_13
case MTLLanguageVersion2_4:
setMSLVersion(2, 4);
@@ -1668,7 +1688,7 @@
case MTLLanguageVersion1_1:
setMSLVersion(1, 1);
break;
-#if MVK_IOS_OR_TVOS
+#if MVK_IOS_OR_TVOS || MVK_XCODE_14
case MTLLanguageVersion1_0:
setMSLVersion(1, 0);
break;
@@ -2309,13 +2329,26 @@
return;
}
+ // kIOMasterPortDefault was deprecated and replaced by kIOMainPortDefault in macOS 12,
+ // and was removed altogether from MacCatalyst in macOS 14 beta.
+ // Both are documented to resolve to MACH_PORT_NULL.
+#if MVK_XCODE_13
+# if MVK_MACCAT
+ const mach_port_t kIOMainPortDefaultMVK = mvkOSVersionIsAtLeast(12.0) ? kIOMainPortDefault : MACH_PORT_NULL;
+# else
+ const mach_port_t kIOMainPortDefaultMVK = mvkOSVersionIsAtLeast(12.0) ? kIOMainPortDefault : kIOMasterPortDefault;
+# endif
+#else
+ const mach_port_t kIOMainPortDefaultMVK = kIOMasterPortDefault;
+#endif
+
// If the device has an associated registry ID, we can use that to get the associated IOKit node.
// The match dictionary is consumed by IOServiceGetMatchingServices and does not need to be released.
bool isFound = false;
io_registry_entry_t entry;
uint64_t regID = mvkGetRegistryID(_mtlDevice);
if (regID) {
- entry = IOServiceGetMatchingService(kIOMasterPortDefault, IORegistryEntryIDMatching(regID));
+ entry = IOServiceGetMatchingService(kIOMainPortDefaultMVK, IORegistryEntryIDMatching(regID));
if (entry) {
// That returned the IOGraphicsAccelerator nub. Its parent, then, is the actual PCI device.
io_registry_entry_t parent;
@@ -2331,7 +2364,7 @@
// Iterate all GPU's, looking for a match.
// The match dictionary is consumed by IOServiceGetMatchingServices and does not need to be released.
io_iterator_t entryIterator;
- if (!isFound && IOServiceGetMatchingServices(kIOMasterPortDefault,
+ if (!isFound && IOServiceGetMatchingServices(kIOMainPortDefaultMVK,
IOServiceMatching("IOPCIDevice"),
&entryIterator) == kIOReturnSuccess) {
while ( !isFound && (entry = IOIteratorNext(entryIterator)) ) {
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm
index 8fa80b4..5d54ef9 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKQueue.mm
@@ -218,8 +218,9 @@
void MVKQueue::initName() {
const char* fmt = "MoltenVKQueue-%d-%d-%.1f";
- char name[256];
- sprintf(name, fmt, _queueFamily->getIndex(), _index, _priority);
+ size_t nameLen = 256;
+ char name[nameLen];
+ snprintf(name, nameLen, fmt, _queueFamily->getIndex(), _index, _priority);
_name = name;
}
diff --git a/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm b/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm
index ea4dd54..ce27cab 100644
--- a/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm
+++ b/MoltenVK/MoltenVK/OS/MVKGPUCapture.mm
@@ -25,18 +25,25 @@
#pragma mark -
#pragma mark MVKGPUCaptureScope
+/** Old-style debug capture was deprecated in macOS 10.13 and iOS 11.0, and is not available on Mac Catalyst. */
#if MVK_MACOS
-static MVKOSVersion kMinOSVersionMTLCaptureScope = 10.13;
+# define MVK_NEED_OLD_DEBUG_CAPTURE (__MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_13) && !MVK_MACCAT
#endif
-#if MVK_IOS_OR_TVOS
-static MVKOSVersion kMinOSVersionMTLCaptureScope = 11.0;
+
+#if MVK_IOS
+# define MVK_NEED_OLD_DEBUG_CAPTURE (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_11_0)
#endif
+#if MVK_TVOS
+# define MVK_NEED_OLD_DEBUG_CAPTURE (__TV_OS_VERSION_MIN_REQUIRED < __TVOS_11_0)
+#endif
+
+
void MVKGPUCaptureScope::beginScope() {
if (_mtlCaptureScope) {
[_mtlCaptureScope beginScope];
} else if (_isDefault && _isFirstBoundary) {
-#if !MVK_MACCAT
+#if MVK_NEED_OLD_DEBUG_CAPTURE
[_mtlQueue insertDebugCaptureBoundary];
#endif
}
@@ -47,7 +54,7 @@
if (_mtlCaptureScope) {
[_mtlCaptureScope endScope];
} else if (_isDefault) {
-#if !MVK_MACCAT
+#if MVK_NEED_OLD_DEBUG_CAPTURE
[_mtlQueue insertDebugCaptureBoundary];
#endif
}
@@ -62,16 +69,20 @@
MVKGPUCaptureScope::MVKGPUCaptureScope(MVKQueue* mvkQueue) {
_mtlQueue = [mvkQueue->getMTLCommandQueue() retain]; // retained
- if (mvkOSVersionIsAtLeast(kMinOSVersionMTLCaptureScope)) {
+ if (mvkOSVersionIsAtLeast(10.13, 11.0)) {
_mtlCaptureScope = [[MTLCaptureManager sharedCaptureManager] newCaptureScopeWithCommandQueue: _mtlQueue]; // retained
_mtlCaptureScope.label = @(mvkQueue->getName().c_str());
- // Due to a retain bug in Metal when the capture layer is installed, capture scopes
- // can have too many references on them. Release the excess references so the scope--
- // and the command queue--aren't leaked. This is a horrible kludge that depends on
- // Apple not taking internal references to capture scopes, but without it, we could
- // get hung up waiting for a new queue, because the old queues are still outstanding.
- while (_mtlCaptureScope.retainCount > 1) {
- [_mtlCaptureScope release];
+
+ // Due to an retain bug in Metal when the capture layer is installed, capture scopes
+ // on older OS versions can have too many references on them. If so, release the excess
+ // references so the scope, and command queue, aren't leaked. This is a horrible kludge
+ // that depends on Apple not taking internal references to capture scopes, but without it,
+ // we could get hung up waiting for a new queue, because the old queues are still outstanding.
+ // This bug was fixed by Apple in macOS 13 and iOS 16.
+ if ( !mvkOSVersionIsAtLeast(13.0, 16.0) ) {
+ while (_mtlCaptureScope.retainCount > 1) {
+ [_mtlCaptureScope release];
+ }
}
}
}
diff --git a/MoltenVK/MoltenVK/Utility/MVKBaseObject.mm b/MoltenVK/MoltenVK/Utility/MVKBaseObject.mm
index b7b6212..7d68067 100644
--- a/MoltenVK/MoltenVK/Utility/MVKBaseObject.mm
+++ b/MoltenVK/MoltenVK/Utility/MVKBaseObject.mm
@@ -129,9 +129,10 @@
// Prepend the error code to the format string
const char* vkRsltName = mvkVkResultName(vkErr);
- char fmtStr[strlen(vkRsltName) + strlen(format) + 4];
- sprintf(fmtStr, "%s: %s", vkRsltName, format);
-
+ size_t rsltLen = strlen(vkRsltName) + strlen(format) + 4;
+ char fmtStr[rsltLen];
+ snprintf(fmtStr, rsltLen, "%s: %s", vkRsltName, format);
+
// Report the error
va_list lclArgs;
va_copy(lclArgs, args);
diff --git a/MoltenVKPackaging.xcodeproj/project.pbxproj b/MoltenVKPackaging.xcodeproj/project.pbxproj
index 632ed45..5e716c6 100644
--- a/MoltenVKPackaging.xcodeproj/project.pbxproj
+++ b/MoltenVKPackaging.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 48;
+ objectVersion = 54;
objects = {
/* Begin PBXAggregateTarget section */
@@ -376,6 +376,7 @@
/* Begin PBXShellScriptBuildPhase section */
2FEA0A3424902F5E00EEF3AD /* Package MoltenVK */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -390,6 +391,7 @@
};
A975D5872140585200D4834F /* Package MoltenVK */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -404,6 +406,7 @@
};
A975D59A2140586700D4834F /* Package MoltenVK */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -418,6 +421,7 @@
};
A9AD70122440ED3B00B9E254 /* Package MoltenVK */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -432,6 +436,7 @@
};
A9B1008824F84BE400EADC6E /* Package MoltenVK */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj b/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
index f20dccb..6c9687c 100644
--- a/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
+++ b/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 52;
+ objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@@ -398,6 +398,7 @@
/* Begin PBXShellScriptBuildPhase section */
A93ED4E724F59E0900FEB018 /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -416,6 +417,7 @@
};
A93ED4E824F59E1100FEB018 /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -434,6 +436,7 @@
};
A93ED4E924F59E1800FEB018 /* Copy to Staging */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -630,12 +633,12 @@
"\"$(SRCROOT)/glslang\"",
"\"$(SRCROOT)/glslang/External/spirv-tools/include\"",
);
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.13;
PRODUCT_NAME = MoltenVKShaderConverter;
SKIP_INSTALL = YES;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 11.0;
WARNING_CFLAGS = "-Wreorder";
};
name = Debug;
@@ -690,12 +693,12 @@
"\"$(SRCROOT)/glslang\"",
"\"$(SRCROOT)/glslang/External/spirv-tools/include\"",
);
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.13;
PRODUCT_NAME = MoltenVKShaderConverter;
SKIP_INSTALL = YES;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 11.0;
VALIDATE_PRODUCT = YES;
WARNING_CFLAGS = "-Wreorder";
};
diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm
index 606119a..06fedcb 100644
--- a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm
+++ b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm
@@ -71,6 +71,11 @@
#define mslVer(MJ, MN, PT) mslVersionMajor == MJ && mslVersionMinor == MN && mslVersionPoint == PT
MTLLanguageVersion mslVerEnum = (MTLLanguageVersion)0;
+#if MVK_XCODE_14
+ if (mslVer(3, 0, 0)) {
+ mslVerEnum = MTLLanguageVersion3_0;
+ } else
+#endif
#if MVK_XCODE_13
if (mslVer(2, 4, 0)) {
mslVerEnum = MTLLanguageVersion2_4;
diff --git a/README.md b/README.md
index 329c8c3..49f7468 100644
--- a/README.md
+++ b/README.md
@@ -158,6 +158,12 @@
During building, **MoltenVK** references the latest *Apple SDK* frameworks. To access these frameworks,
and to avoid build errors, be sure to use the latest publicly available version of *Xcode*.
+**MoltenVK** can be built to support at least *macOS 10.11*, *iOS 9*, or *tvOS 9*, but the default
+_Xcode_ build settings in the included _Xcode_ projects are set to a minimum deployment target of
+*macOS 10.13*, *iOS 11*, and *tvOS 11*, which are the oldest OS versions supported by the current
+_Xcode_ version. If you require support for earlier OS versions, modify the `MACOSX_DEPLOYMENT_TARGET`,
+`IPHONEOS_DEPLOYMENT_TARGET`, or `TVOS_DEPLOYMENT_TARGET` build settings in _Xcode_ before building **MoltenVK**.
+
>***Note:*** To support `IOSurfaces` on *iOS* or *tvOS*, **MoltenVK**, and any app that uses
**MoltenVK**, must be built with a minimum **iOS Deployment Target** (aka `IPHONEOS_DEPLOYMENT_TARGET `)
build setting of `iOS 11.0` or greater, or a minimum **tvOS Deployment Target** (aka `TVOS_DEPLOYMENT_TARGET `)