From 3fac11dad44175dc0548657a2738a3510b63d6e1 Mon Sep 17 00:00:00 2001 From: SRSaunders <82544213+SRSaunders@users.noreply.github.com> Date: Wed, 2 Oct 2024 14:09:18 -0400 Subject: [PATCH 1/5] Disable unsupported Metal Pixel formats for iOS/tvOS Simulator --- MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm index e14522d32..71c96dd88 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm @@ -126,6 +126,14 @@ # define MTLPixelFormatBC7_RGBAUnorm_sRGB MTLPixelFormatInvalid # endif +# if MVK_OS_SIMULATOR +# define MTLPixelFormatR8Unorm_sRGB MTLPixelFormatInvalid +# define MTLPixelFormatRG8Unorm_sRGB MTLPixelFormatInvalid +# define MTLPixelFormatB5G6R5Unorm MTLPixelFormatInvalid +# define MTLPixelFormatA1BGR5Unorm MTLPixelFormatInvalid +# define MTLPixelFormatABGR4Unorm MTLPixelFormatInvalid +# endif + # define MTLPixelFormatDepth16Unorm_Stencil8 MTLPixelFormatDepth32Float_Stencil8 # define MTLPixelFormatDepth24Unorm_Stencil8 MTLPixelFormatInvalid # define MTLPixelFormatX24_Stencil8 MTLPixelFormatInvalid From 3b6841925ba97848730d96f080dd6ad6fc1ff849 Mon Sep 17 00:00:00 2001 From: SRSaunders <82544213+SRSaunders@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:01:38 -0400 Subject: [PATCH 2/5] Incorporate additional texture limitations on the Simulator --- MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm | 2 +- .../MoltenVK/GPUObjects/MVKPixelFormats.mm | 20 ++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index 366b72798..cf7460fa2 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -1595,7 +1595,7 @@ addSurfFmt(RGBA16Float); addSurfFmt(RGB10A2Unorm); addSurfFmt(BGR10A2Unorm); -#if MVK_APPLE_SILICON +#if MVK_APPLE_SILICON && !MVK_OS_SIMULATOR addSurfFmt(BGRA10_XR); addSurfFmt(BGRA10_XR_sRGB); addSurfFmt(BGR10_XR); diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm index 71c96dd88..e0f8781ad 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm @@ -132,6 +132,13 @@ # define MTLPixelFormatB5G6R5Unorm MTLPixelFormatInvalid # define MTLPixelFormatA1BGR5Unorm MTLPixelFormatInvalid # define MTLPixelFormatABGR4Unorm MTLPixelFormatInvalid +# define MTLPixelFormatBGR5A1Unorm MTLPixelFormatInvalid +# define MTLPixelFormatGBGR422 MTLPixelFormatInvalid +# define MTLPixelFormatBGRG422 MTLPixelFormatInvalid +# define MTLPixelFormatBGR10_XR MTLPixelFormatInvalid +# define MTLPixelFormatBGR10_XR_sRGB MTLPixelFormatInvalid +# define MTLPixelFormatBGRA10_XR MTLPixelFormatInvalid +# define MTLPixelFormatBGRA10_XR_sRGB MTLPixelFormatInvalid # endif # define MTLPixelFormatDepth16Unorm_Stencil8 MTLPixelFormatDepth32Float_Stencil8 @@ -1187,13 +1194,17 @@ #define addMTLPixelFormatDescFull(mtlFmt, mtlFmtLinear, viewClass, appleGPUCaps, macGPUCaps) \ addValidatedMTLPixelFormatDesc(MTLPixelFormat ##mtlFmt, MTLPixelFormat ##mtlFmtLinear, MVKMTLViewClass:: viewClass, \ - kMVKMTLFmtCaps ##appleGPUCaps, kMVKMTLFmtCaps ##macGPUCaps, gpuCaps, "MTLPixelFormat" #mtlFmt) + appleGPUCaps, macGPUCaps, gpuCaps, "MTLPixelFormat" #mtlFmt) #define addMTLPixelFormatDesc(mtlFmt, viewClass, appleGPUCaps, macGPUCaps) \ - addMTLPixelFormatDescFull(mtlFmt, mtlFmt, viewClass, appleGPUCaps, macGPUCaps) + addMTLPixelFormatDescFull(mtlFmt, mtlFmt, viewClass, kMVKMTLFmtCaps ##appleGPUCaps, kMVKMTLFmtCaps ##macGPUCaps) #define addMTLPixelFormatDescSRGB(mtlFmt, viewClass, appleGPUCaps, macGPUCaps, mtlFmtLinear) \ - addMTLPixelFormatDescFull(mtlFmt, mtlFmtLinear, viewClass, appleGPUCaps, macGPUCaps) + /* Cannot write to sRGB textures in the simulator */ \ + if(MVK_OS_SIMULATOR) { MVKMTLFmtCaps appleFmtCaps = kMVKMTLFmtCaps ##appleGPUCaps; \ + mvkDisableFlags(appleFmtCaps, kMVKMTLFmtCapsWrite); \ + addMTLPixelFormatDescFull(mtlFmt, mtlFmtLinear, viewClass, appleFmtCaps, kMVKMTLFmtCaps ##macGPUCaps); } \ + else { addMTLPixelFormatDescFull(mtlFmt, mtlFmtLinear, viewClass, kMVKMTLFmtCaps ##appleGPUCaps, kMVKMTLFmtCaps ##macGPUCaps); } void MVKPixelFormats::initMTLPixelFormatCapabilities(const MVKMTLDeviceCapabilities& gpuCaps) { _mtlPixelFormatDescriptions.reserve(KIBI); // High estimate to future-proof against allocations as elements are added. shrink_to_fit() below will collapse. @@ -1516,6 +1527,9 @@ // on macOS is the least-intrusive way to handle this in a Vulkan-friendly way. disableMTLPixFmtCapsIfGPU( Mac1, RGB9E5Float, Blend); + // RGB9E5Float cannot be used as a render target on the simulator + disableMTLPixFmtCapsIf( MVK_OS_SIMULATOR, RGB9E5Float, ColorAtt ); + setMTLPixFmtCapsIf( iosOnly6, RG32Uint, RWC ); setMTLPixFmtCapsIf( iosOnly6, RG32Sint, RWC ); From 393ce064c1e71acdbdb9ef17257b0beb5c242174 Mon Sep 17 00:00:00 2001 From: SRSaunders <82544213+SRSaunders@users.noreply.github.com> Date: Thu, 3 Oct 2024 21:19:06 -0400 Subject: [PATCH 3/5] Move unsupported pixel formats to top level for iOS/tvOS/visionOS Simulator --- .../MoltenVK/GPUObjects/MVKPixelFormats.mm | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm index e0f8781ad..3783f6390 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm @@ -126,21 +126,6 @@ # define MTLPixelFormatBC7_RGBAUnorm_sRGB MTLPixelFormatInvalid # endif -# if MVK_OS_SIMULATOR -# define MTLPixelFormatR8Unorm_sRGB MTLPixelFormatInvalid -# define MTLPixelFormatRG8Unorm_sRGB MTLPixelFormatInvalid -# define MTLPixelFormatB5G6R5Unorm MTLPixelFormatInvalid -# define MTLPixelFormatA1BGR5Unorm MTLPixelFormatInvalid -# define MTLPixelFormatABGR4Unorm MTLPixelFormatInvalid -# define MTLPixelFormatBGR5A1Unorm MTLPixelFormatInvalid -# define MTLPixelFormatGBGR422 MTLPixelFormatInvalid -# define MTLPixelFormatBGRG422 MTLPixelFormatInvalid -# define MTLPixelFormatBGR10_XR MTLPixelFormatInvalid -# define MTLPixelFormatBGR10_XR_sRGB MTLPixelFormatInvalid -# define MTLPixelFormatBGRA10_XR MTLPixelFormatInvalid -# define MTLPixelFormatBGRA10_XR_sRGB MTLPixelFormatInvalid -# endif - # define MTLPixelFormatDepth16Unorm_Stencil8 MTLPixelFormatDepth32Float_Stencil8 # define MTLPixelFormatDepth24Unorm_Stencil8 MTLPixelFormatInvalid # define MTLPixelFormatX24_Stencil8 MTLPixelFormatInvalid @@ -169,6 +154,21 @@ # define MTLPixelFormatASTC_12x12_HDR MTLPixelFormatInvalid #endif +#if MVK_OS_SIMULATOR +# define MTLPixelFormatR8Unorm_sRGB MTLPixelFormatInvalid +# define MTLPixelFormatRG8Unorm_sRGB MTLPixelFormatInvalid +# define MTLPixelFormatB5G6R5Unorm MTLPixelFormatInvalid +# define MTLPixelFormatA1BGR5Unorm MTLPixelFormatInvalid +# define MTLPixelFormatABGR4Unorm MTLPixelFormatInvalid +# define MTLPixelFormatBGR5A1Unorm MTLPixelFormatInvalid +# define MTLPixelFormatBGR10_XR MTLPixelFormatInvalid +# define MTLPixelFormatBGR10_XR_sRGB MTLPixelFormatInvalid +# define MTLPixelFormatBGRA10_XR MTLPixelFormatInvalid +# define MTLPixelFormatBGRA10_XR_sRGB MTLPixelFormatInvalid +# define MTLPixelFormatGBGR422 MTLPixelFormatInvalid +# define MTLPixelFormatBGRG422 MTLPixelFormatInvalid +#endif + #if !MVK_XCODE_15 # define MTLVertexFormatFloatRG11B10 MTLVertexFormatInvalid # define MTLVertexFormatFloatRGB9E5 MTLVertexFormatInvalid @@ -1194,7 +1194,7 @@ #define addMTLPixelFormatDescFull(mtlFmt, mtlFmtLinear, viewClass, appleGPUCaps, macGPUCaps) \ addValidatedMTLPixelFormatDesc(MTLPixelFormat ##mtlFmt, MTLPixelFormat ##mtlFmtLinear, MVKMTLViewClass:: viewClass, \ - appleGPUCaps, macGPUCaps, gpuCaps, "MTLPixelFormat" #mtlFmt) + appleGPUCaps, macGPUCaps, gpuCaps, "MTLPixelFormat" #mtlFmt) #define addMTLPixelFormatDesc(mtlFmt, viewClass, appleGPUCaps, macGPUCaps) \ addMTLPixelFormatDescFull(mtlFmt, mtlFmt, viewClass, kMVKMTLFmtCaps ##appleGPUCaps, kMVKMTLFmtCaps ##macGPUCaps) @@ -1202,9 +1202,9 @@ #define addMTLPixelFormatDescSRGB(mtlFmt, viewClass, appleGPUCaps, macGPUCaps, mtlFmtLinear) \ /* Cannot write to sRGB textures in the simulator */ \ if(MVK_OS_SIMULATOR) { MVKMTLFmtCaps appleFmtCaps = kMVKMTLFmtCaps ##appleGPUCaps; \ - mvkDisableFlags(appleFmtCaps, kMVKMTLFmtCapsWrite); \ - addMTLPixelFormatDescFull(mtlFmt, mtlFmtLinear, viewClass, appleFmtCaps, kMVKMTLFmtCaps ##macGPUCaps); } \ - else { addMTLPixelFormatDescFull(mtlFmt, mtlFmtLinear, viewClass, kMVKMTLFmtCaps ##appleGPUCaps, kMVKMTLFmtCaps ##macGPUCaps); } + mvkDisableFlags(appleFmtCaps, kMVKMTLFmtCapsWrite); \ + addMTLPixelFormatDescFull(mtlFmt, mtlFmtLinear, viewClass, appleFmtCaps, kMVKMTLFmtCaps ##macGPUCaps); } \ + else { addMTLPixelFormatDescFull(mtlFmt, mtlFmtLinear, viewClass, kMVKMTLFmtCaps ##appleGPUCaps, kMVKMTLFmtCaps ##macGPUCaps); } void MVKPixelFormats::initMTLPixelFormatCapabilities(const MVKMTLDeviceCapabilities& gpuCaps) { _mtlPixelFormatDescriptions.reserve(KIBI); // High estimate to future-proof against allocations as elements are added. shrink_to_fit() below will collapse. From 4f86cf182a2cce85dc9206304ab15d63a8b5c18e Mon Sep 17 00:00:00 2001 From: SRSaunders <82544213+SRSaunders@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:35:46 -0400 Subject: [PATCH 4/5] Apply _metalFeatures and _features overrides to all Simulators: iOS, tvOS, visionOS --- MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index cf7460fa2..013c253ed 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -2146,11 +2146,8 @@ if ( mvkOSVersionIsAtLeast(13.0) ) { _metalFeatures.mslVersionEnum = MTLLanguageVersion2_2; _metalFeatures.placementHeaps = getMVKConfig().useMTLHeap; -#if MVK_OS_SIMULATOR - _metalFeatures.nativeTextureSwizzle = false; -#else _metalFeatures.nativeTextureSwizzle = true; -#endif + if (supportsMTLGPUFamily(Apple3)) { _metalFeatures.native3DCompressedTextures = true; } @@ -2448,9 +2445,10 @@ #endif } -// iOS and tvOS adjustments necessary when running on the simulator. +// iOS, tvOS and visionOS adjustments necessary when running on the simulator. #if MVK_OS_SIMULATOR _metalFeatures.mtlBufferAlignment = 256; // Even on Apple Silicon + _metalFeatures.nativeTextureSwizzle = false; #endif // Argument buffers @@ -2566,13 +2564,9 @@ _features.dualSrcBlend = true; -#if MVK_OS_SIMULATOR - _features.depthClamp = false; -#else if (supportsMTLGPUFamily(Apple2)) { _features.depthClamp = true; } -#endif if (supportsMTLGPUFamily(Apple3)) { _features.tessellationShader = true; @@ -2592,6 +2586,11 @@ } #endif +// iOS, tvOS and visionOS adjustments necessary when running on the simulator. +#if MVK_OS_SIMULATOR + _features.depthClamp = false; +#endif + #if MVK_MACOS _features.occlusionQueryPrecise = true; _features.imageCubeArray = true; From 88ddfdee9ca83e6ae396d6d6a8ed7e16bd615416 Mon Sep 17 00:00:00 2001 From: SRSaunders <82544213+SRSaunders@users.noreply.github.com> Date: Thu, 10 Oct 2024 20:48:48 -0400 Subject: [PATCH 5/5] Add missing depthClamp and shaderTessellationAndGeometryPointSize features to tvOS --- MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index 013c253ed..48e153b2e 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -2541,6 +2541,7 @@ _features.textureCompressionASTC_LDR = true; _features.dualSrcBlend = true; + _features.depthClamp = true; if (supportsMTLGPUFamily(Apple3)) { _features.occlusionQueryPrecise = true; @@ -2548,6 +2549,7 @@ if (supportsMTLGPUFamily(Apple3)) { _features.tessellationShader = true; + _features.shaderTessellationAndGeometryPointSize = true; } #endif