Fix build error when querying MTLDevice support for BC compression.
This build error seems to have been exposed in Xcode 12.5.
Add mvkSupportsBCTextureCompression() to manage use of
[MTLDevice supportsBCTextureCompression] to query for
MTLDevice support for BC compression across all platforms.
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
index 9245e9b..23e22d4 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
@@ -970,6 +970,9 @@
/** Returns the registry ID of the specified device, or zero if the device does not have a registry ID. */
uint64_t mvkGetRegistryID(id<MTLDevice> mtlDevice);
+/** Returns whether the MTLDevice supports BC texture compression. */
+bool mvkSupportsBCTextureCompression(id<MTLDevice> mtlDevice);
+
/** Redefinitions because Mac Catalyst doesn't support feature sets. */
#if MVK_MACCAT
#define MTLFeatureSet_macOS_GPUFamily1_v1 MTLGPUFamilyMacCatalyst1
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
index 0c34db3..5a3b8f0 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
@@ -1594,6 +1594,7 @@
_features.inheritedQueries = true;
_features.shaderSampledImageArrayDynamicIndexing = _metalFeatures.arrayOfTextures;
+ _features.textureCompressionBC = mvkSupportsBCTextureCompression(_mtlDevice);
if (_metalFeatures.indirectDrawing && _metalFeatures.baseVertexInstanceDrawing) {
_features.drawIndirectFirstInstance = true;
@@ -1664,7 +1665,6 @@
#endif
#if MVK_MACOS
- _features.textureCompressionBC = true;
_features.occlusionQueryPrecise = true;
_features.imageCubeArray = true;
_features.depthClamp = true;
@@ -1696,12 +1696,6 @@
_features.textureCompressionETC2 = true;
_features.textureCompressionASTC_LDR = true;
}
-
-#if MVK_MACOS_APPLE_SILICON
- if ([_mtlDevice respondsToSelector: @selector(supportsBCTextureCompression)]) {
- _features.textureCompressionBC = _mtlDevice.supportsBCTextureCompression;
- }
-#endif
#endif
}
@@ -4171,3 +4165,13 @@
uint64_t mvkGetRegistryID(id<MTLDevice> mtlDevice) {
return [mtlDevice respondsToSelector: @selector(registryID)] ? mtlDevice.registryID : 0;
}
+
+bool mvkSupportsBCTextureCompression(id<MTLDevice> mtlDevice) {
+#if MVK_MACOS && !MVK_MACCAT
+ if ([mtlDevice respondsToSelector: @selector(supportsBCTextureCompression)]) {
+ return mtlDevice.supportsBCTextureCompression;
+ }
+ return true;
+#endif
+ return false;
+}
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm
index 3c7fefc..380a33b 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm
@@ -1509,9 +1509,7 @@
disableMTLPixFmtCaps( RGBA32Float, Filter );
}
- if ([mtlDevice respondsToSelector: @selector(supportsBCTextureCompression)] &&
- !mtlDevice.supportsBCTextureCompression) {
-
+ if ( !mvkSupportsBCTextureCompression(mtlDevice) ) {
disableAllMTLPixFmtCaps( BC1_RGBA );
disableAllMTLPixFmtCaps( BC1_RGBA_sRGB );
disableAllMTLPixFmtCaps( BC2_RGBA );