diff --git a/Common/MVKCommonEnvironment.h b/Common/MVKCommonEnvironment.h index c95992236..7ed83bba8 100644 --- a/Common/MVKCommonEnvironment.h +++ b/Common/MVKCommonEnvironment.h @@ -88,6 +88,10 @@ extern "C" { #endif /** Building with Xcode versions. iOS version also covers tvOS. */ +#ifndef MVK_XCODE_15 +# define MVK_XCODE_15 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 140000) || \ + (__IPHONE_OS_VERSION_MAX_ALLOWED >= 170000)) +#endif #ifndef MVK_XCODE_14_3 # define MVK_XCODE_14_3 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 130300) || \ (__IPHONE_OS_VERSION_MAX_ALLOWED >= 160400)) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index fa8fd1d80..ed481b0b0 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -1737,6 +1737,11 @@ _metalFeatures.mslVersionEnum = MTLLanguageVersion3_0; } #endif +#if MVK_XCODE_15 + if ( mvkOSVersionIsAtLeast(17.0) ) { + _metalFeatures.mslVersionEnum = MTLLanguageVersion3_1; + } +#endif #endif @@ -1855,6 +1860,11 @@ _metalFeatures.mslVersionEnum = MTLLanguageVersion3_0; } #endif +#if MVK_XCODE_15 + if ( mvkOSVersionIsAtLeast(17.0) ) { + _metalFeatures.mslVersionEnum = MTLLanguageVersion3_1; + } +#endif #endif @@ -1940,6 +1950,11 @@ _metalFeatures.mslVersionEnum = MTLLanguageVersion3_0; } #endif +#if MVK_XCODE_15 + if ( mvkOSVersionIsAtLeast(14.0) ) { + _metalFeatures.mslVersionEnum = MTLLanguageVersion3_1; + } +#endif // This is an Apple GPU--treat it accordingly. if (supportsMTLGPUFamily(Apple1)) { @@ -2055,6 +2070,11 @@ _metalFeatures.mslVersion = SPIRV_CROSS_NAMESPACE::CompilerMSL::Options::make_msl_version(maj, min); switch (_metalFeatures.mslVersionEnum) { +#if MVK_XCODE_15 + case MTLLanguageVersion3_1: + setMSLVersion(3, 1); + break; +#endif #if MVK_XCODE_14 case MTLLanguageVersion3_0: setMSLVersion(3, 0); diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm index 79f1dffa9..7dfbec9fb 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm @@ -922,9 +922,14 @@ addVkFormatDesc( R64G64B64A64_SINT, Invalid, Invalid, Invalid, Invalid, 1, 1, 32, ColorFloat ); addVkFormatDesc( R64G64B64A64_SFLOAT, Invalid, Invalid, Invalid, Invalid, 1, 1, 32, ColorFloat ); +#if MVK_XCODE_15 + addVkFormatDesc( B10G11R11_UFLOAT_PACK32, RG11B10Float, Invalid, FloatRG11B10, Invalid, 1, 1, 4, ColorFloat ); + addVkFormatDesc( E5B9G9R9_UFLOAT_PACK32, RGB9E5Float, Invalid, FloatRGB9E5, Invalid, 1, 1, 4, ColorFloat ); +#else addVkFormatDesc( B10G11R11_UFLOAT_PACK32, RG11B10Float, Invalid, Invalid, Invalid, 1, 1, 4, ColorFloat ); addVkFormatDesc( E5B9G9R9_UFLOAT_PACK32, RGB9E5Float, Invalid, Invalid, Invalid, 1, 1, 4, ColorFloat ); - +#endif + addVkFormatDesc( D32_SFLOAT, Depth32Float, Invalid, Invalid, Invalid, 1, 1, 4, DepthStencil ); addVkFormatDesc( D32_SFLOAT_S8_UINT, Depth32Float_Stencil8, Invalid, Invalid, Invalid, 1, 1, 5, DepthStencil ); @@ -1338,6 +1343,11 @@ addMTLVertexFormatDesc( Half, None, None ); addMTLVertexFormatDesc( UChar4Normalized_BGRA, None, None ); + +#if MVK_XCODE_15 + addMTLVertexFormatDesc( FloatRG11B10, Vertex, Vertex ); + addMTLVertexFormatDesc( FloatRGB9E5, Vertex, Vertex ); +#endif // When adding to this list, be sure to ensure _mtlVertexFormatCount is large enough for the format count } @@ -1634,6 +1644,11 @@ addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, Short, Vertex ); addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, Half, Vertex ); addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex ); + +#if MVK_XCODE_15 + addGPUOSMTLVtxFmtCaps( Apple5, 14.0, FloatRG11B10, Vertex ); + addGPUOSMTLVtxFmtCaps( Apple5, 14.0, FloatRGB9E5, Vertex ); +#endif #endif #if MVK_TVOS @@ -1727,6 +1742,11 @@ addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, Short, Vertex ); addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, Half, Vertex ); addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex ); + +#if MVK_XCODE_15 + addGPUOSMTLVtxFmtCaps( Apple5, 17.0, FloatRG11B10, Vertex ); + addGPUOSMTLVtxFmtCaps( Apple5, 17.0, FloatRGB9E5, Vertex ); +#endif // Disable for tvOS simulator last. #if MVK_OS_SIMULATOR @@ -1884,6 +1904,11 @@ addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, Short, Vertex ); addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, Half, Vertex ); addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, UChar4Normalized_BGRA, Vertex ); + +#if MVK_XCODE_15 + addGPUOSMTLVtxFmtCaps( Apple5, 17.0, FloatRG11B10, Vertex ); + addGPUOSMTLVtxFmtCaps( Apple5, 17.0, FloatRGB9E5, Vertex ); +#endif // Disable for iOS simulator last. #if MVK_OS_SIMULATOR diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm index 965d6cb03..c90b878ac 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_15 + if (mslVer(3, 1, 0)) { + mslVerEnum = MTLLanguageVersion3_1; + } else +#endif #if MVK_XCODE_14 if (mslVer(3, 0, 0)) { mslVerEnum = MTLLanguageVersion3_0;