From f5b937c7f98eace82faf50074e743ec6c8ad4db0 Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Sat, 18 Jul 2020 00:06:51 -0400 Subject: [PATCH] Add native support for VK_FORMAT_D16_UNORM on iOS 13.0+ and tvOS 13.0+. --- Docs/Whats_New.md | 1 + .../MoltenVK/GPUObjects/MVKPixelFormats.h | 14 +- .../MoltenVK/GPUObjects/MVKPixelFormats.mm | 523 ++++++++++-------- 3 files changed, 297 insertions(+), 241 deletions(-) diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md index 7c6a487c..cb25e108 100644 --- a/Docs/Whats_New.md +++ b/Docs/Whats_New.md @@ -21,6 +21,7 @@ Released TBD - Add support for extensions: - VK_KHR_sampler_ycbcr_conversion - VK_EXT_robustness2 +- Add native support for `VK_FORMAT_D16_UNORM` on **_iOS 13.0+_** and **_tvOS 13.0+_**. - Add support for **_tvOS_** platform. - Add support for **_iOS Simulator_** and **_tvOS Simulator_** build destinations. - Cube demo runs on **_tvOS_**, **_iOS Simulator_**, and **_tvOS Simulator_**. diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h index cf49d8de..e749f3ac 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h @@ -20,6 +20,7 @@ #include "mvk_datatypes.h" #include "MVKEnvironment.h" +#include "MVKOSExtensions.h" #include "MVKBaseObject.h" #include #include @@ -68,8 +69,9 @@ typedef enum : uint16_t { kMVKMTLFmtCapsAll = (kMVKMTLFmtCapsRFWCMB | kMVKMTLFmtCapsResolve), kMVKMTLFmtCapsDRM = (kMVKMTLFmtCapsDSAtt | kMVKMTLFmtCapsRead | kMVKMTLFmtCapsMSAA), + kMVKMTLFmtCapsDRFM = (kMVKMTLFmtCapsDRM | kMVKMTLFmtCapsFilter), kMVKMTLFmtCapsDRMR = (kMVKMTLFmtCapsDRM | kMVKMTLFmtCapsResolve), - kMVKMTLFmtCapsDRFMR = (kMVKMTLFmtCapsDRMR | kMVKMTLFmtCapsFilter), + kMVKMTLFmtCapsDRFMR = (kMVKMTLFmtCapsDRFM | kMVKMTLFmtCapsResolve), kMVKMTLFmtCapsChromaSubsampling = kMVKMTLFmtCapsRF, kMVKMTLFmtCapsMultiPlanar = kMVKMTLFmtCapsChromaSubsampling, @@ -317,6 +319,11 @@ protected: MTLFeatureSet mtlFeatSet, MTLPixelFormat mtlPixFmt, MVKMTLFmtCaps mtlFmtCaps); + void addMTLPixelFormatCapabilities(id mtlDevice, + MTLGPUFamily gpuFamily, + MVKOSVersion minOSVer, + MTLPixelFormat mtlPixFmt, + MVKMTLFmtCaps mtlFmtCaps); void disableMTLPixelFormatCapabilities(MTLPixelFormat mtlPixFmt, MVKMTLFmtCaps mtlFmtCaps); void disableAllMTLPixelFormatCapabilities(MTLPixelFormat mtlPixFmt); @@ -324,6 +331,11 @@ protected: MTLFeatureSet mtlFeatSet, MTLVertexFormat mtlVtxFmt, MVKMTLFmtCaps mtlFmtCaps); + void addMTLVertexFormatCapabilities(id mtlDevice, + MTLGPUFamily gpuFamily, + MVKOSVersion minOSVer, + MTLVertexFormat mtlVtxFmt, + MVKMTLFmtCaps mtlFmtCaps); template void testFmt(const T v1, const T v2, const char* fmtName, const char* funcName); diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm index 6978d395..77bdf91c 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm @@ -91,7 +91,6 @@ using namespace std; #endif #if MVK_IOS_OR_TVOS -# define MTLPixelFormatDepth16Unorm MTLPixelFormatInvalid # define MTLPixelFormatDepth24Unorm_Stencil8 MTLPixelFormatInvalid # define MTLPixelFormatX24_Stencil8 MTLPixelFormatInvalid # define MTLPixelFormatBC1_RGBA MTLPixelFormatInvalid @@ -133,11 +132,11 @@ bool MVKPixelFormats::isSupported(MTLPixelFormat mtlFormat) { bool MVKPixelFormats::isDepthFormat(MTLPixelFormat mtlFormat) { switch (mtlFormat) { case MTLPixelFormatDepth32Float: -#if MVK_MACOS case MTLPixelFormatDepth16Unorm: + case MTLPixelFormatDepth32Float_Stencil8: +#if MVK_MACOS case MTLPixelFormatDepth24Unorm_Stencil8: #endif - case MTLPixelFormatDepth32Float_Stencil8: return true; default: return false; @@ -1137,6 +1136,21 @@ void MVKPixelFormats::addMTLPixelFormatCapabilities(id mtlDevice, } } +// If the device supports the GPU family, add additional capabilities to a MTLPixelFormat +void MVKPixelFormats::addMTLPixelFormatCapabilities(id mtlDevice, + MTLGPUFamily gpuFamily, + MVKOSVersion minOSVer, + MTLPixelFormat mtlPixFmt, + MVKMTLFmtCaps mtlFmtCaps) { + if (mvkOSVersionIsAtLeast(minOSVer) && + [mtlDevice respondsToSelector: @selector(supportsFamily:)] && + [mtlDevice supportsFamily: gpuFamily]) { + + mvkEnableFlags(getMTLPixelFormatDesc(mtlPixFmt).mtlFmtCaps, mtlFmtCaps); + } +} + + // Disable capability flags in the Metal pixel format. void MVKPixelFormats::disableMTLPixelFormatCapabilities(MTLPixelFormat mtlPixFmt, MVKMTLFmtCaps mtlFmtCaps) { @@ -1157,6 +1171,20 @@ void MVKPixelFormats::addMTLVertexFormatCapabilities(id mtlDevice, } } +// If the device supports the GPU family, add additional capabilities to a MTLVertexFormat +void MVKPixelFormats::addMTLVertexFormatCapabilities(id mtlDevice, + MTLGPUFamily gpuFamily, + MVKOSVersion minOSVer, + MTLVertexFormat mtlVtxFmt, + MVKMTLFmtCaps mtlFmtCaps) { + if (mvkOSVersionIsAtLeast(minOSVer) && + [mtlDevice respondsToSelector: @selector(supportsFamily:)] && + [mtlDevice supportsFamily: gpuFamily]) { + + mvkEnableFlags(getMTLVertexFormatDesc(mtlVtxFmt).mtlFmtCaps, mtlFmtCaps); + } +} + // If supporting a physical device, retrieve the MTLDevice from it, // otherwise create a temp copy of the system default MTLDevice. void MVKPixelFormats::modifyMTLFormatCapabilities() { @@ -1169,322 +1197,337 @@ void MVKPixelFormats::modifyMTLFormatCapabilities() { } } -#define addMTLPixelFormatCapabilities(FEAT_SET, MTL_FMT, CAPS) \ + +#define addFeatSetMTLPixFmtCaps(FEAT_SET, MTL_FMT, CAPS) \ addMTLPixelFormatCapabilities(mtlDevice, MTLFeatureSet_ ##FEAT_SET, MTLPixelFormat ##MTL_FMT, kMVKMTLFmtCaps ##CAPS) -#define disableAllMTLPixelFormatCapabilities(MTL_FMT) \ +#define addGPUOSMTLPixFmtCaps(GPU_FAM, OS_VER, MTL_FMT, CAPS) \ + addMTLPixelFormatCapabilities(mtlDevice, MTLGPUFamily ##GPU_FAM, OS_VER, MTLPixelFormat ##MTL_FMT, kMVKMTLFmtCaps ##CAPS) + +#define disableAllMTLPixFmtCaps(MTL_FMT) \ disableAllMTLPixelFormatCapabilities(MTLPixelFormat ##MTL_FMT) -#define disableMTLPixelFormatCapabilities(MTL_FMT, CAPS) \ +#define disableMTLPixFmtCaps(MTL_FMT, CAPS) \ disableMTLPixelFormatCapabilities(MTLPixelFormat ##MTL_FMT, kMVKMTLFmtCaps ##CAPS) -#define addMTLVertexFormatCapabilities(FEAT_SET, MTL_FMT, CAPS) \ +#define addFeatSetMTLVtxFmtCaps(FEAT_SET, MTL_FMT, CAPS) \ addMTLVertexFormatCapabilities(mtlDevice, MTLFeatureSet_ ##FEAT_SET, MTLVertexFormat ##MTL_FMT, kMVKMTLFmtCaps ##CAPS) +#define addGPUOSMTLVtxFmtCaps(GPU_FAM, OS_VER, MTL_FMT, CAPS) \ + addMTLVertexFormatCapabilities(mtlDevice, MTLGPUFamily ##GPU_FAM, OS_VER, MTLVertexFormat ##MTL_FMT, kMVKMTLFmtCaps ##CAPS) + // Modifies the format capability tables based on the capabilities of the specific MTLDevice #if MVK_MACOS void MVKPixelFormats::modifyMTLFormatCapabilities(id mtlDevice) { - addMTLPixelFormatCapabilities( macOS_GPUFamily1_v1, R32Uint, Atomic ); - addMTLPixelFormatCapabilities( macOS_GPUFamily1_v1, R32Sint, Atomic ); + addFeatSetMTLPixFmtCaps( macOS_GPUFamily1_v1, R32Uint, Atomic ); + addFeatSetMTLPixFmtCaps( macOS_GPUFamily1_v1, R32Sint, Atomic ); if (mtlDevice.isDepth24Stencil8PixelFormatSupported) { - addMTLPixelFormatCapabilities( macOS_GPUFamily1_v1, Depth24Unorm_Stencil8, DRFMR ); + addFeatSetMTLPixFmtCaps( macOS_GPUFamily1_v1, Depth24Unorm_Stencil8, DRFMR ); } - addMTLPixelFormatCapabilities( macOS_GPUFamily1_v2, Depth16Unorm, DRFMR ); + addFeatSetMTLPixFmtCaps( macOS_GPUFamily1_v2, Depth16Unorm, DRFMR ); - addMTLPixelFormatCapabilities( macOS_GPUFamily1_v3, BGR10A2Unorm, RFCMRB ); + addFeatSetMTLPixFmtCaps( macOS_GPUFamily1_v3, BGR10A2Unorm, RFCMRB ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, UCharNormalized, Vertex ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, CharNormalized, Vertex ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, UChar, Vertex ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, Char, Vertex ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, UShortNormalized, Vertex ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, ShortNormalized, Vertex ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, UShort, Vertex ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, Short, Vertex ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, Half, Vertex ); - addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, UCharNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, CharNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, UChar, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, Char, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, UShortNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, ShortNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, UShort, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, Short, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, Half, Vertex ); + addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex ); } #endif #if MVK_TVOS void MVKPixelFormats::modifyMTLFormatCapabilities(id mtlDevice) { - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v2, R8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, R8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v2, R8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, R8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v2, R8Snorm, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v2, R8Snorm, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v2, RG8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, RG8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v2, RG8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, RG8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, RG8Snorm, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, RG8Snorm, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, RGBA8Snorm, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, RGBA8Snorm, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, R32Uint, RWC ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, R32Uint, Atomic ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, R32Sint, RWC ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, R32Sint, Atomic ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, R32Uint, RWC ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, R32Uint, Atomic ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, R32Sint, RWC ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, R32Sint, Atomic ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, R32Float, RWCMB ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, R32Float, RWCMB ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v2, RGBA8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, RGBA8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v2, RGBA8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, RGBA8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, RGBA8Snorm, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v2, BGRA8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, BGRA8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v2, BGRA8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, BGRA8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, RGB10A2Unorm, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, RGB10A2Uint, RWCM ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, RG11B10Float, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, RGB9E5Float, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, RGB10A2Unorm, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, RGB10A2Uint, RWCM ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, RG11B10Float, All ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, RGB9E5Float, All ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, RG32Uint, RWC ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, RG32Sint, RWC ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, RG32Float, RWCB ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, RG32Uint, RWC ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, RG32Sint, RWC ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, RG32Float, RWCB ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, RGBA32Uint, RWC ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, RGBA32Sint, RWC ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily1_v1, RGBA32Float, RWC ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, RGBA32Uint, RWC ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, RGBA32Sint, RWC ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v1, RGBA32Float, RWC ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_4x4_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_4x4_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_5x4_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_5x4_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_5x5_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_5x5_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_6x5_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_6x5_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_6x6_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_6x6_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_8x5_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_8x5_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_8x6_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_8x6_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_8x8_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_8x8_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_10x5_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_10x5_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_10x6_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_10x6_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_10x8_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_10x8_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_10x10_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_10x10_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_12x10_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_12x10_sRGB, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_12x12_LDR, RF ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily1_v1, ASTC_12x12_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_4x4_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_4x4_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_5x4_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_5x4_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_5x5_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_5x5_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_6x5_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_6x5_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_6x6_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_6x6_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_8x5_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_8x5_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_8x6_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_8x6_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_8x8_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_8x8_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_10x5_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_10x5_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_10x6_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_10x6_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_10x8_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_10x8_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_10x10_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_10x10_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_12x10_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_12x10_sRGB, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_12x12_LDR, RF ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily1_v1, ASTC_12x12_sRGB, RF ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, Depth32Float, DRMR ); + addFeatSetMTLPixFmtCaps( tvOS_GPUFamily2_v1, Depth32Float_Stencil8, DRMR ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, Depth32Float, DRMR ); - addMTLPixelFormatCapabilities( tvOS_GPUFamily2_v1, Depth32Float_Stencil8, DRMR ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily2_v1, BGRA10_XR, All ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily2_v1, BGRA10_XR_sRGB, All ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily2_v1, BGR10_XR, All ); + addFeatSetMTLPixFmtCaps(tvOS_GPUFamily2_v1, BGR10_XR_sRGB, All ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily2_v1, BGRA10_XR, All ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily2_v1, BGRA10_XR_sRGB, All ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily2_v1, BGR10_XR, All ); - addMTLPixelFormatCapabilities(tvOS_GPUFamily2_v1, BGR10_XR_sRGB, All ); + addGPUOSMTLPixFmtCaps( Apple1, 13.0, Depth16Unorm, DRFM ); + addGPUOSMTLPixFmtCaps( Apple3, 13.0, Depth16Unorm, DRFMR ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, UCharNormalized, Vertex ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, CharNormalized, Vertex ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, UChar, Vertex ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, Char, Vertex ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, UShortNormalized, Vertex ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, ShortNormalized, Vertex ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, UShort, Vertex ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, Short, Vertex ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, Half, Vertex ); - addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex ); + // Vertex formats + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, UCharNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, CharNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, UChar, Vertex ); + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, Char, Vertex ); + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, UShortNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, ShortNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, UShort, Vertex ); + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, Short, Vertex ); + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, Half, Vertex ); + addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex ); // Disable for tvOS simulator last. #if MVK_OS_SIMULATOR - disableAllMTLPixelFormatCapabilities(R8Unorm_sRGB); - disableAllMTLPixelFormatCapabilities(RG8Unorm_sRGB); - disableAllMTLPixelFormatCapabilities(B5G6R5Unorm); - disableAllMTLPixelFormatCapabilities(A1BGR5Unorm); - disableAllMTLPixelFormatCapabilities(ABGR4Unorm); - disableAllMTLPixelFormatCapabilities(BGR5A1Unorm); + disableAllMTLPixFmtCaps(R8Unorm_sRGB); + disableAllMTLPixFmtCaps(RG8Unorm_sRGB); + disableAllMTLPixFmtCaps(B5G6R5Unorm); + disableAllMTLPixFmtCaps(A1BGR5Unorm); + disableAllMTLPixFmtCaps(ABGR4Unorm); + disableAllMTLPixFmtCaps(BGR5A1Unorm); - disableAllMTLPixelFormatCapabilities(BGRA10_XR); - disableAllMTLPixelFormatCapabilities(BGRA10_XR_sRGB); - disableAllMTLPixelFormatCapabilities(BGR10_XR); - disableAllMTLPixelFormatCapabilities(BGR10_XR_sRGB); + disableAllMTLPixFmtCaps(BGRA10_XR); + disableAllMTLPixFmtCaps(BGRA10_XR_sRGB); + disableAllMTLPixFmtCaps(BGR10_XR); + disableAllMTLPixFmtCaps(BGR10_XR_sRGB); - disableAllMTLPixelFormatCapabilities(GBGR422); - disableAllMTLPixelFormatCapabilities(BGRG422); + disableAllMTLPixFmtCaps(GBGR422); + disableAllMTLPixFmtCaps(BGRG422); - disableMTLPixelFormatCapabilities(RGB9E5Float, ColorAtt); + disableMTLPixFmtCaps(RGB9E5Float, ColorAtt); - disableMTLPixelFormatCapabilities(R8Unorm_sRGB, Write); - disableMTLPixelFormatCapabilities(RG8Unorm_sRGB, Write); - disableMTLPixelFormatCapabilities(RGBA8Unorm_sRGB, Write); - disableMTLPixelFormatCapabilities(BGRA8Unorm_sRGB, Write); - disableMTLPixelFormatCapabilities(PVRTC_RGBA_2BPP_sRGB, Write); - disableMTLPixelFormatCapabilities(PVRTC_RGBA_4BPP_sRGB, Write); - disableMTLPixelFormatCapabilities(ETC2_RGB8_sRGB, Write); - disableMTLPixelFormatCapabilities(ETC2_RGB8A1_sRGB, Write); - disableMTLPixelFormatCapabilities(EAC_RGBA8_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_4x4_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_5x4_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_5x5_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_6x5_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_6x6_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_8x5_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_8x6_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_8x8_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_10x5_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_10x6_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_10x8_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_10x10_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_12x10_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_12x12_sRGB, Write); + disableMTLPixFmtCaps(R8Unorm_sRGB, Write); + disableMTLPixFmtCaps(RG8Unorm_sRGB, Write); + disableMTLPixFmtCaps(RGBA8Unorm_sRGB, Write); + disableMTLPixFmtCaps(BGRA8Unorm_sRGB, Write); + disableMTLPixFmtCaps(PVRTC_RGBA_2BPP_sRGB, Write); + disableMTLPixFmtCaps(PVRTC_RGBA_4BPP_sRGB, Write); + disableMTLPixFmtCaps(ETC2_RGB8_sRGB, Write); + disableMTLPixFmtCaps(ETC2_RGB8A1_sRGB, Write); + disableMTLPixFmtCaps(EAC_RGBA8_sRGB, Write); + disableMTLPixFmtCaps(ASTC_4x4_sRGB, Write); + disableMTLPixFmtCaps(ASTC_5x4_sRGB, Write); + disableMTLPixFmtCaps(ASTC_5x5_sRGB, Write); + disableMTLPixFmtCaps(ASTC_6x5_sRGB, Write); + disableMTLPixFmtCaps(ASTC_6x6_sRGB, Write); + disableMTLPixFmtCaps(ASTC_8x5_sRGB, Write); + disableMTLPixFmtCaps(ASTC_8x6_sRGB, Write); + disableMTLPixFmtCaps(ASTC_8x8_sRGB, Write); + disableMTLPixFmtCaps(ASTC_10x5_sRGB, Write); + disableMTLPixFmtCaps(ASTC_10x6_sRGB, Write); + disableMTLPixFmtCaps(ASTC_10x8_sRGB, Write); + disableMTLPixFmtCaps(ASTC_10x10_sRGB, Write); + disableMTLPixFmtCaps(ASTC_12x10_sRGB, Write); + disableMTLPixFmtCaps(ASTC_12x12_sRGB, Write); #endif } #endif #if MVK_IOS void MVKPixelFormats::modifyMTLFormatCapabilities(id mtlDevice) { - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v3, R8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, R8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v3, R8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, R8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, R8Snorm, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, R8Snorm, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v3, RG8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, RG8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v3, RG8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, RG8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, RG8Snorm, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, RG8Snorm, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, R32Uint, RWC ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, R32Uint, Atomic ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, R32Sint, RWC ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, R32Sint, Atomic ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, R32Uint, RWC ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, R32Uint, Atomic ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, R32Sint, RWC ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, R32Sint, Atomic ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, R32Float, RWCMB ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, R32Float, RWCMB ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v3, RGBA8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, RGBA8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v3, RGBA8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, RGBA8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, RGBA8Snorm, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, RGBA8Snorm, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v3, BGRA8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, BGRA8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v3, BGRA8Unorm_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, BGRA8Unorm_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, RGB10A2Unorm, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, RGB10A2Uint, RWCM ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, RG11B10Float, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, RGB9E5Float, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, RGB10A2Unorm, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, RGB10A2Uint, RWCM ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, RG11B10Float, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, RGB9E5Float, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, RG32Uint, RWC ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, RG32Sint, RWC ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, RG32Float, RWCB ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, RG32Uint, RWC ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, RG32Sint, RWC ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, RG32Float, RWCB ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, RGBA32Uint, RWC ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, RGBA32Sint, RWC ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, RGBA32Float, RWC ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, RGBA32Uint, RWC ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, RGBA32Sint, RWC ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v2, RGBA32Float, RWC ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_4x4_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_4x4_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_5x4_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_5x4_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_5x5_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_5x5_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_6x5_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_6x5_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_6x6_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_6x6_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x5_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x5_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x6_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x6_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x8_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x8_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x5_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x5_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x6_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x6_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x8_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x8_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x10_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x10_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_12x10_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_12x10_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_12x12_LDR, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_12x12_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_4x4_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_4x4_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_5x4_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_5x4_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_5x5_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_5x5_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_6x5_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_6x5_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_6x6_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_6x6_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_8x5_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_8x5_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_8x6_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_8x6_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_8x8_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_8x8_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_10x5_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_10x5_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_10x6_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_10x6_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_10x8_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_10x8_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_10x10_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_10x10_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_12x10_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_12x10_sRGB, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_12x12_LDR, RF ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily2_v1, ASTC_12x12_sRGB, RF ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, Depth32Float, DRMR ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, Depth32Float_Stencil8, DRMR ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, Depth32Float, DRMR ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v1, Depth32Float_Stencil8, DRMR ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v2, BGRA10_XR, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v2, BGRA10_XR_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v2, BGR10_XR, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily3_v2, BGR10_XR_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v2, BGRA10_XR, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v2, BGRA10_XR_sRGB, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v2, BGR10_XR, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily3_v2, BGR10_XR_sRGB, All ); - addMTLPixelFormatCapabilities( iOS_GPUFamily1_v4, BGR10A2Unorm, All ); + addFeatSetMTLPixFmtCaps( iOS_GPUFamily1_v4, BGR10A2Unorm, All ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, UCharNormalized, Vertex ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, CharNormalized, Vertex ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, UChar, Vertex ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, Char, Vertex ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, UShortNormalized, Vertex ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, ShortNormalized, Vertex ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, UShort, Vertex ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, Short, Vertex ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, Half, Vertex ); - addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, UChar4Normalized_BGRA, Vertex ); + addGPUOSMTLPixFmtCaps( Apple1, 13.0, Depth16Unorm, DRFM ); + addGPUOSMTLPixFmtCaps( Apple3, 13.0, Depth16Unorm, DRFMR ); + + // Vertex formats + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, UCharNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, CharNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, UChar, Vertex ); + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, Char, Vertex ); + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, UShortNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, ShortNormalized, Vertex ); + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, UShort, Vertex ); + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, Short, Vertex ); + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, Half, Vertex ); + addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, UChar4Normalized_BGRA, Vertex ); // Disable for iOS simulator last. #if MVK_OS_SIMULATOR - disableAllMTLPixelFormatCapabilities(R8Unorm_sRGB); - disableAllMTLPixelFormatCapabilities(RG8Unorm_sRGB); - disableAllMTLPixelFormatCapabilities(B5G6R5Unorm); - disableAllMTLPixelFormatCapabilities(A1BGR5Unorm); - disableAllMTLPixelFormatCapabilities(ABGR4Unorm); - disableAllMTLPixelFormatCapabilities(BGR5A1Unorm); + disableAllMTLPixFmtCaps(R8Unorm_sRGB); + disableAllMTLPixFmtCaps(RG8Unorm_sRGB); + disableAllMTLPixFmtCaps(B5G6R5Unorm); + disableAllMTLPixFmtCaps(A1BGR5Unorm); + disableAllMTLPixFmtCaps(ABGR4Unorm); + disableAllMTLPixFmtCaps(BGR5A1Unorm); - disableAllMTLPixelFormatCapabilities(BGRA10_XR); - disableAllMTLPixelFormatCapabilities(BGRA10_XR_sRGB); - disableAllMTLPixelFormatCapabilities(BGR10_XR); - disableAllMTLPixelFormatCapabilities(BGR10_XR_sRGB); + disableAllMTLPixFmtCaps(BGRA10_XR); + disableAllMTLPixFmtCaps(BGRA10_XR_sRGB); + disableAllMTLPixFmtCaps(BGR10_XR); + disableAllMTLPixFmtCaps(BGR10_XR_sRGB); - disableAllMTLPixelFormatCapabilities(GBGR422); - disableAllMTLPixelFormatCapabilities(BGRG422); + disableAllMTLPixFmtCaps(GBGR422); + disableAllMTLPixFmtCaps(BGRG422); - disableMTLPixelFormatCapabilities(RGB9E5Float, ColorAtt); + disableMTLPixFmtCaps(RGB9E5Float, ColorAtt); - disableMTLPixelFormatCapabilities(R8Unorm_sRGB, Write); - disableMTLPixelFormatCapabilities(RG8Unorm_sRGB, Write); - disableMTLPixelFormatCapabilities(RGBA8Unorm_sRGB, Write); - disableMTLPixelFormatCapabilities(BGRA8Unorm_sRGB, Write); - disableMTLPixelFormatCapabilities(PVRTC_RGBA_2BPP_sRGB, Write); - disableMTLPixelFormatCapabilities(PVRTC_RGBA_4BPP_sRGB, Write); - disableMTLPixelFormatCapabilities(ETC2_RGB8_sRGB, Write); - disableMTLPixelFormatCapabilities(ETC2_RGB8A1_sRGB, Write); - disableMTLPixelFormatCapabilities(EAC_RGBA8_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_4x4_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_5x4_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_5x5_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_6x5_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_6x6_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_8x5_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_8x6_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_8x8_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_10x5_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_10x6_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_10x8_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_10x10_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_12x10_sRGB, Write); - disableMTLPixelFormatCapabilities(ASTC_12x12_sRGB, Write); + disableMTLPixFmtCaps(R8Unorm_sRGB, Write); + disableMTLPixFmtCaps(RG8Unorm_sRGB, Write); + disableMTLPixFmtCaps(RGBA8Unorm_sRGB, Write); + disableMTLPixFmtCaps(BGRA8Unorm_sRGB, Write); + disableMTLPixFmtCaps(PVRTC_RGBA_2BPP_sRGB, Write); + disableMTLPixFmtCaps(PVRTC_RGBA_4BPP_sRGB, Write); + disableMTLPixFmtCaps(ETC2_RGB8_sRGB, Write); + disableMTLPixFmtCaps(ETC2_RGB8A1_sRGB, Write); + disableMTLPixFmtCaps(EAC_RGBA8_sRGB, Write); + disableMTLPixFmtCaps(ASTC_4x4_sRGB, Write); + disableMTLPixFmtCaps(ASTC_5x4_sRGB, Write); + disableMTLPixFmtCaps(ASTC_5x5_sRGB, Write); + disableMTLPixFmtCaps(ASTC_6x5_sRGB, Write); + disableMTLPixFmtCaps(ASTC_6x6_sRGB, Write); + disableMTLPixFmtCaps(ASTC_8x5_sRGB, Write); + disableMTLPixFmtCaps(ASTC_8x6_sRGB, Write); + disableMTLPixFmtCaps(ASTC_8x8_sRGB, Write); + disableMTLPixFmtCaps(ASTC_10x5_sRGB, Write); + disableMTLPixFmtCaps(ASTC_10x6_sRGB, Write); + disableMTLPixFmtCaps(ASTC_10x8_sRGB, Write); + disableMTLPixFmtCaps(ASTC_10x10_sRGB, Write); + disableMTLPixFmtCaps(ASTC_12x10_sRGB, Write); + disableMTLPixFmtCaps(ASTC_12x12_sRGB, Write); #endif } #endif -#undef addMTLPixelFormatCapabilities -#undef disableMTLPixelFormatCapabilities -#undef disableAllMTLPixelFormatCapabilities -#undef addMTLVertexFormatCapabilities +#undef addFeatSetMTLPixFmtCaps +#undef addGPUOSMTLPixFmtCaps +#undef disableMTLPixFmtCaps +#undef disableAllMTLPixFmtCaps +#undef addFeatSetMTLVtxFmtCaps +#undef addGPUOSMTLVtxFmtCaps // Populates the VkFormat lookup maps and connects Vulkan and Metal pixel formats to one-another. void MVKPixelFormats::buildVkFormatMaps() {