From 86c080d9c8de06d14c249d1a52bf0961b31299b9 Mon Sep 17 00:00:00 2001 From: sean Date: Tue, 6 Jun 2023 16:43:57 +0200 Subject: [PATCH 1/2] Add: Support for RG11B10 and RGB9E5 vertex formats --- .../MoltenVK/GPUObjects/MVKPixelFormats.h | 2 +- .../MoltenVK/GPUObjects/MVKPixelFormats.mm | 31 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h index 5d23225b3..0e1ecd74d 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h @@ -34,7 +34,7 @@ static const uint32_t _vkFormatCount = 256; static const uint32_t _vkFormatCoreCount = VK_FORMAT_ASTC_12x12_SRGB_BLOCK + 1; static const uint32_t _mtlPixelFormatCount = 256; static const uint32_t _mtlPixelFormatCoreCount = MTLPixelFormatX32_Stencil8 + 2; // The actual last enum value is not available on iOS -static const uint32_t _mtlVertexFormatCount = MTLVertexFormatHalf + 1; +static const uint32_t _mtlVertexFormatCount = MTLVertexFormatHalf + 3; // The actual last enum value is not available before Xcode 15 #pragma mark - diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm index 7b7e04cd7..ce60ba3e7 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm @@ -148,6 +148,11 @@ # define MTLPixelFormatASTC_12x12_HDR MTLPixelFormatInvalid #endif +#if !MVK_XCODE_15 +# define MTLVertexFormatFloatRG11B10 MTLVertexFormatInvalid +# define MTLVertexFormatFloatRGB9E5 MTLVertexFormatInvalid +#endif + #pragma mark - #pragma mark MVKPixelFormats @@ -976,9 +981,9 @@ addVkFormatDesc( R64G64B64A64_SINT, Invalid, Invalid, Invalid, Invalid, 1, 1, 32, ColorFloat ); addVkFormatDesc( R64G64B64A64_SFLOAT, Invalid, Invalid, Invalid, Invalid, 1, 1, 32, ColorFloat ); - addVkFormatDesc( B10G11R11_UFLOAT_PACK32, RG11B10Float, Invalid, Invalid, Invalid, 1, 1, 4, ColorFloat ); - addVkFormatDesc( E5B9G9R9_UFLOAT_PACK32, RGB9E5Float, Invalid, Invalid, Invalid, 1, 1, 4, ColorFloat ); - + addVkFormatDesc( B10G11R11_UFLOAT_PACK32, RG11B10Float, Invalid, FloatRG11B10, Invalid, 1, 1, 4, ColorFloat ); + addVkFormatDesc( E5B9G9R9_UFLOAT_PACK32, RGB9E5Float, Invalid, FloatRGB9E5, Invalid, 1, 1, 4, ColorFloat ); + 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 ); @@ -1392,6 +1397,11 @@ addMTLVertexFormatDesc( Half, None, None ); addMTLVertexFormatDesc( UChar4Normalized_BGRA, None, None ); + +#if MVK_XCODE_15 + addMTLVertexFormatDesc( FloatRG11B10, None, None ); + addMTLVertexFormatDesc( FloatRGB9E5, None, None ); +#endif // When adding to this list, be sure to ensure _mtlVertexFormatCount is large enough for the format count } @@ -1683,6 +1693,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 @@ -1776,6 +1791,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 @@ -1933,6 +1953,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 From 1cbfd0a0a7d04d9d064bc7011b4b1a08e776b17b Mon Sep 17 00:00:00 2001 From: sean Date: Thu, 28 Dec 2023 20:48:36 +0100 Subject: [PATCH 2/2] Add: Recognize Apple9 --- MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm | 6 ++++++ MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index a47b4e626..ec1bf9f5f 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -2926,6 +2926,9 @@ static uint32_t mvkGetEntryProperty(io_registry_entry_t entry, CFStringRef prope #if MVK_XCODE_14 || (MVK_IOS && MVK_XCODE_13) if (supportsMTLGPUFamily(Apple8)) { gpuFam = MTLGPUFamilyApple8; } #endif +#if MVK_XCODE_15 && (MVK_IOS || MVK_MACOS) + if (supportsMTLGPUFamily(Apple9)) { gpuFam = MTLGPUFamilyApple9; } +#endif // Combine OS major (8 bits), OS minor (8 bits), and GPU family (16 bits) // into one 32-bit value summarizing highest GPU capability. @@ -3326,6 +3329,9 @@ static uint32_t mvkGetEntryProperty(io_registry_entry_t entry, CFStringRef prope logMsg += "\n\tsupports the following Metal Versions, GPU's and Feature Sets:"; logMsg += "\n\t\tMetal Shading Language %s"; +#if MVK_XCODE_15 && (MVK_IOS || MVK_MACOS) + if (supportsMTLGPUFamily(Apple9)) { logMsg += "\n\t\tGPU Family Apple 9"; } +#endif #if MVK_XCODE_14 || (MVK_IOS && MVK_XCODE_13) if (supportsMTLGPUFamily(Apple8)) { logMsg += "\n\t\tGPU Family Apple 8"; } #endif diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm index ce60ba3e7..afec11c06 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm @@ -1682,6 +1682,12 @@ addGPUOSMTLPixFmtCaps( Apple5, 11.0, BGR10_XR, All ); addGPUOSMTLPixFmtCaps( Apple5, 11.0, BGR10_XR_sRGB, All ); #endif + +#if MVK_XCODE_15 + addGPUOSMTLPixFmtCaps( Apple9, 14.0, R32Float, All ); + addGPUOSMTLPixFmtCaps( Apple9, 14.0, RG32Float, All ); + addGPUOSMTLPixFmtCaps( Apple9, 14.0, RGBA32Float, All ); +#endif addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, UCharNormalized, Vertex ); addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, CharNormalized, Vertex ); @@ -1941,6 +1947,12 @@ addGPUOSMTLPixFmtCaps( Apple1, 13.0, Depth16Unorm, DRFM ); addGPUOSMTLPixFmtCaps( Apple3, 13.0, Depth16Unorm, DRFMR ); + +#if MVK_XCODE_15 + addGPUOSMTLPixFmtCaps( Apple9, 14.0, R32Float, All ); + addGPUOSMTLPixFmtCaps( Apple9, 14.0, RG32Float, All ); + addGPUOSMTLPixFmtCaps( Apple9, 14.0, RGBA32Float, All ); +#endif // Vertex formats addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, UCharNormalized, Vertex );