Merge pull request #479 from cdavis5e/yet-more-features
MVKDevice: Correct some more features and limits.
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
index 4c6e8a0..0049e43 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
@@ -694,6 +694,10 @@
_metalFeatures.arrayOfSamplers = true;
}
+ if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily5_v1] ) {
+ _metalFeatures.layeredRendering = true;
+ }
+
#endif
#if MVK_MACOS
@@ -731,6 +735,10 @@
#endif
+ if ( [_mtlDevice respondsToSelector: @selector(maxBufferLength)] ) {
+ _metalFeatures.maxMTLBufferSize = _mtlDevice.maxBufferLength;
+ }
+
for (uint32_t sc = VK_SAMPLE_COUNT_1_BIT; sc <= VK_SAMPLE_COUNT_64_BIT; sc <<= 1) {
if ([_mtlDevice supportsTextureSampleCount: mvkSampleCountFromVkSampleCountFlagBits((VkSampleCountFlagBits)sc)]) {
_metalFeatures.supportedSampleCounts |= sc;
@@ -760,7 +768,9 @@
_features.shaderStorageBufferArrayDynamicIndexing = true;
_features.shaderClipDistance = true;
_features.shaderInt16 = true;
- _features.multiDrawIndirect = true;
+ _features.multiDrawIndirect = true;
+ _features.variableMultisampleRate = true;
+ _features.inheritedQueries = true;
_features.shaderSampledImageArrayDynamicIndexing = _metalFeatures.arrayOfTextures;
_features.shaderStorageImageArrayDynamicIndexing = _metalFeatures.arrayOfTextures;
@@ -780,11 +790,11 @@
_features.occlusionQueryPrecise = true;
}
- if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily1_v4] ) {
+ if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily1_v4] ) {
_features.dualSrcBlend = true;
}
- if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily2_v4] ) {
+ if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily2_v4] ) {
_features.depthClamp = true;
}
@@ -873,8 +883,8 @@
// VkBool32 sparseResidency8Samples;
// VkBool32 sparseResidency16Samples;
// VkBool32 sparseResidencyAliased;
-// VkBool32 variableMultisampleRate;
-// VkBool32 inheritedQueries;
+// VkBool32 variableMultisampleRate; // done
+// VkBool32 inheritedQueries; // done
//} VkPhysicalDeviceFeatures;
/** Initializes the physical device properties of this instance. */
@@ -900,7 +910,16 @@
#endif
_properties.limits.maxFragmentOutputAttachments = _properties.limits.maxColorAttachments;
- _properties.limits.maxFragmentDualSrcAttachments = _properties.limits.maxFragmentOutputAttachments;
+#if MVK_IOS
+ if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily1_v4] ) {
+ _properties.limits.maxFragmentDualSrcAttachments = 1;
+ } else {
+ _properties.limits.maxFragmentDualSrcAttachments = 0;
+ }
+#endif
+#if MVK_MACOS
+ _properties.limits.maxFragmentDualSrcAttachments = 1;
+#endif
_properties.limits.framebufferColorSampleCounts = _metalFeatures.supportedSampleCounts;
_properties.limits.framebufferDepthSampleCounts = _metalFeatures.supportedSampleCounts;
@@ -917,15 +936,11 @@
_properties.limits.maxImageDimensionCube = _metalFeatures.maxTextureDimension;
_properties.limits.maxFramebufferWidth = _metalFeatures.maxTextureDimension;
_properties.limits.maxFramebufferHeight = _metalFeatures.maxTextureDimension;
-#if MVK_IOS
- if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily5_v1] ) {
+ if ( _metalFeatures.layeredRendering ) {
_properties.limits.maxFramebufferLayers = 256;
} else {
_properties.limits.maxFramebufferLayers = 1;
}
-#else
- _properties.limits.maxFramebufferLayers = 256;
-#endif
_properties.limits.maxViewportDimensions[0] = _metalFeatures.maxTextureDimension;
_properties.limits.maxViewportDimensions[1] = _metalFeatures.maxTextureDimension;
@@ -1016,7 +1031,7 @@
_properties.limits.lineWidthRange[1] = 1;
_properties.limits.pointSizeGranularity = 1;
- _properties.limits.standardSampleLocations = VK_FALSE;
+ _properties.limits.standardSampleLocations = VK_TRUE;
_properties.limits.strictLines = VK_FALSE;
VkExtent3D wgSize = mvkVkExtent3DFromMTLSize(_mtlDevice.maxThreadsPerThreadgroup);