MVKPixelFormats reduce some MTLPixelFormat capabilities for simulators.

Add MVK_IOS_SIMULATOR and MVK_TVOS_SIMULATOR macros.
MVKPixelFormats add disableMTLPixelFormatCapabilities().
MVKPixelFormats add disableAllMTLPixelFormatCapabilities().
This commit is contained in:
Bill Hollings 2020-06-22 23:52:51 -04:00
parent 72517a2474
commit 7910f43867
3 changed files with 138 additions and 16 deletions

View File

@ -36,40 +36,50 @@ extern "C" {
*/
#ifndef MVK_DEBUG
# ifdef DEBUG
# define MVK_DEBUG 1
# define MVK_DEBUG 1
# else
# define MVK_DEBUG 0
# define MVK_DEBUG 0
# endif
#endif
/** Building for macOS. */
#ifndef MVK_MACOS
# define MVK_MACOS TARGET_OS_OSX
# define MVK_MACOS TARGET_OS_OSX
#endif
/** Building for iOS. */
#ifndef MVK_IOS
# define MVK_IOS TARGET_OS_IOS
# define MVK_IOS TARGET_OS_IOS
#endif
/** Building for tvOS. */
#ifndef MVK_TVOS
# define MVK_TVOS TARGET_OS_TV
# define MVK_TVOS TARGET_OS_TV
#endif
/** Building for iOS or tvOS. */
#ifndef MVK_IOS_OR_TVOS
# define MVK_IOS_OR_TVOS (MVK_IOS || MVK_TVOS)
# define MVK_IOS_OR_TVOS (MVK_IOS || MVK_TVOS)
#endif
/** Building for iOS or tvOS. */
#ifndef MVK_MACOS_OR_IOS
# define MVK_MACOS_OR_IOS (MVK_MACOS || MVK_IOS)
# define MVK_MACOS_OR_IOS (MVK_MACOS || MVK_IOS)
#endif
/** Building for iOS or tvOS Simulator. */
/** Building for a Simulator. */
#ifndef MVK_OS_SIMULATOR
# define MVK_OS_SIMULATOR TARGET_OS_SIMULATOR
# define MVK_OS_SIMULATOR TARGET_OS_SIMULATOR
#endif
/** Building for iOS Simulator. */
#ifndef MVK_IOS_SIMULATOR
# define MVK_IOS_SIMULATOR (MVK_IOS && MVK_OS_SIMULATOR)
#endif
/** Building for tvOS Simulator. */
#ifndef MVK_TVOS_SIMULATOR
# define MVK_TVOS_SIMULATOR (MVK_TVOS && MVK_OS_SIMULATOR)
#endif
/** Directive to identify public symbols. */

View File

@ -317,6 +317,9 @@ protected:
MTLFeatureSet mtlFeatSet,
MTLPixelFormat mtlPixFmt,
MVKMTLFmtCaps mtlFmtCaps);
void disableMTLPixelFormatCapabilities(MTLPixelFormat mtlPixFmt,
MVKMTLFmtCaps mtlFmtCaps);
void disableAllMTLPixelFormatCapabilities(MTLPixelFormat mtlPixFmt);
void addMTLVertexFormatCapabilities(id<MTLDevice> mtlDevice,
MTLFeatureSet mtlFeatSet,
MTLVertexFormat mtlVtxFmt,

View File

@ -995,6 +995,13 @@ void MVKPixelFormats::initMTLPixelFormatCapabilities() {
addMTLPixelFormatDesc( GBGR422, RF, RF );
addMTLPixelFormatDesc( BGRG422, RF, RF );
// Extended range and wide color pixel formats
addMTLPixelFormatDesc( BGRA10_XR, None, None );
addMTLPixelFormatDesc( BGRA10_XR_sRGB, None, None );
addMTLPixelFormatDesc( BGR10_XR, None, None );
addMTLPixelFormatDesc( BGR10_XR_sRGB, None, None );
addMTLPixelFormatDesc( BGR10A2Unorm, None, None );
// Depth and stencil pixel formats
addMTLPixelFormatDesc( Depth16Unorm, None, None );
addMTLPixelFormatDesc( Depth32Float, DRM, DRFMR );
@ -1004,13 +1011,6 @@ void MVKPixelFormats::initMTLPixelFormatCapabilities() {
addMTLPixelFormatDesc( X24_Stencil8, None, DRM );
addMTLPixelFormatDesc( X32_Stencil8, DRM, DRM );
// Extended range and wide color pixel formats
addMTLPixelFormatDesc( BGRA10_XR, None, None );
addMTLPixelFormatDesc( BGRA10_XR_sRGB, None, None );
addMTLPixelFormatDesc( BGR10_XR, None, None );
addMTLPixelFormatDesc( BGR10_XR_sRGB, None, None );
addMTLPixelFormatDesc( BGR10A2Unorm, None, None );
// When adding to this list, be sure to ensure _mtlPixelFormatCount is large enough for the format count
}
@ -1137,6 +1137,16 @@ void MVKPixelFormats::addMTLPixelFormatCapabilities(id<MTLDevice> mtlDevice,
}
}
// Disable capability flags in the Metal pixel format.
void MVKPixelFormats::disableMTLPixelFormatCapabilities(MTLPixelFormat mtlPixFmt,
MVKMTLFmtCaps mtlFmtCaps) {
mvkDisableFlags(getMTLPixelFormatDesc(mtlPixFmt).mtlFmtCaps, mtlFmtCaps);
}
void MVKPixelFormats::disableAllMTLPixelFormatCapabilities(MTLPixelFormat mtlPixFmt) {
getMTLPixelFormatDesc(mtlPixFmt).mtlFmtCaps = kMVKMTLFmtCapsNone;
}
// If the device supports the feature set, add additional capabilities to a MTLVertexFormat
void MVKPixelFormats::addMTLVertexFormatCapabilities(id<MTLDevice> mtlDevice,
MTLFeatureSet mtlFeatSet,
@ -1162,6 +1172,12 @@ void MVKPixelFormats::modifyMTLFormatCapabilities() {
#define addMTLPixelFormatCapabilities(FEAT_SET, MTL_FMT, CAPS) \
addMTLPixelFormatCapabilities(mtlDevice, MTLFeatureSet_ ##FEAT_SET, MTLPixelFormat ##MTL_FMT, kMVKMTLFmtCaps ##CAPS)
#define disableAllMTLPixelFormatCapabilities(MTL_FMT) \
disableAllMTLPixelFormatCapabilities(MTLPixelFormat ##MTL_FMT)
#define disableMTLPixelFormatCapabilities(MTL_FMT, CAPS) \
disableMTLPixelFormatCapabilities(MTLPixelFormat ##MTL_FMT, kMVKMTLFmtCaps ##CAPS)
#define addMTLVertexFormatCapabilities(FEAT_SET, MTL_FMT, CAPS) \
addMTLVertexFormatCapabilities(mtlDevice, MTLFeatureSet_ ##FEAT_SET, MTLVertexFormat ##MTL_FMT, kMVKMTLFmtCaps ##CAPS)
@ -1192,6 +1208,7 @@ void MVKPixelFormats::modifyMTLFormatCapabilities(id<MTLDevice> mtlDevice) {
addMTLVertexFormatCapabilities( macOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex );
}
#endif
#if MVK_TVOS
void MVKPixelFormats::modifyMTLFormatCapabilities(id<MTLDevice> mtlDevice) {
addMTLPixelFormatCapabilities( tvOS_GPUFamily1_v2, R8Unorm_sRGB, All );
@ -1281,8 +1298,53 @@ void MVKPixelFormats::modifyMTLFormatCapabilities(id<MTLDevice> mtlDevice) {
addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, Short, Vertex );
addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, Half, Vertex );
addMTLVertexFormatCapabilities( tvOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex );
// Disable for simulator last.
#if MVK_TVOS_SIMULATOR
disableAllMTLPixelFormatCapabilities(R8Unorm_sRGB);
disableAllMTLPixelFormatCapabilities(RG8Unorm_sRGB);
disableAllMTLPixelFormatCapabilities(B5G6R5Unorm);
disableAllMTLPixelFormatCapabilities(A1BGR5Unorm);
disableAllMTLPixelFormatCapabilities(ABGR4Unorm);
disableAllMTLPixelFormatCapabilities(BGR5A1Unorm);
disableAllMTLPixelFormatCapabilities(BGRA10_XR);
disableAllMTLPixelFormatCapabilities(BGRA10_XR_sRGB);
disableAllMTLPixelFormatCapabilities(BGR10_XR);
disableAllMTLPixelFormatCapabilities(BGR10_XR_sRGB);
disableAllMTLPixelFormatCapabilities(GBGR422);
disableAllMTLPixelFormatCapabilities(BGRG422);
disableMTLPixelFormatCapabilities(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);
#endif
}
#endif
#if MVK_IOS
void MVKPixelFormats::modifyMTLFormatCapabilities(id<MTLDevice> mtlDevice) {
addMTLPixelFormatCapabilities( iOS_GPUFamily2_v3, R8Unorm_sRGB, All );
@ -1372,9 +1434,56 @@ void MVKPixelFormats::modifyMTLFormatCapabilities(id<MTLDevice> mtlDevice) {
addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, Short, Vertex );
addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, Half, Vertex );
addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, UChar4Normalized_BGRA, Vertex );
// Disable for simulator last.
#if MVK_IOS_SIMULATOR
disableAllMTLPixelFormatCapabilities(R8Unorm_sRGB);
disableAllMTLPixelFormatCapabilities(RG8Unorm_sRGB);
disableAllMTLPixelFormatCapabilities(B5G6R5Unorm);
disableAllMTLPixelFormatCapabilities(A1BGR5Unorm);
disableAllMTLPixelFormatCapabilities(ABGR4Unorm);
disableAllMTLPixelFormatCapabilities(BGR5A1Unorm);
disableAllMTLPixelFormatCapabilities(BGRA10_XR);
disableAllMTLPixelFormatCapabilities(BGRA10_XR_sRGB);
disableAllMTLPixelFormatCapabilities(BGR10_XR);
disableAllMTLPixelFormatCapabilities(BGR10_XR_sRGB);
disableAllMTLPixelFormatCapabilities(GBGR422);
disableAllMTLPixelFormatCapabilities(BGRG422);
disableMTLPixelFormatCapabilities(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);
#endif
}
#endif
#undef addMTLPixelFormatCapabilities
#undef disableMTLPixelFormatCapabilities
#undef disableAllMTLPixelFormatCapabilities
#undef addMTLVertexFormatCapabilities
// Populates the VkFormat lookup maps and connects Vulkan and Metal pixel formats to one-another.