diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md index 588461a0..9739ba9b 100644 --- a/Docs/Whats_New.md +++ b/Docs/Whats_New.md @@ -18,6 +18,7 @@ MoltenVK 1.1.2 Released TBD +- Advertise support for `shaderInt64` feature. - Support fast math on MSL compiler via `MVKConfiguration::fastMathEnabled` configuration setting and `MVK_CONFIG_FAST_MATH_ENABLED` environment variable (both disabled by default). - Support _GitHub Actions_ for CI builds on pull requests. diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h index 2a2fccc3..7bd2e815 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h @@ -322,6 +322,10 @@ public: } } + /** Returns whether the MSL version is supported on this device. */ + inline bool mslVersionIsAtLeast(MTLLanguageVersion minVer) { return _metalFeatures.mslVersionEnum >= minVer; } + + #pragma mark Construction /** Constructs an instance wrapping the specified Vulkan instance and Metal device. */ diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index 552f25b7..298f4c88 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -1587,6 +1587,7 @@ void MVKPhysicalDevice::initFeatures() { #if MVK_TVOS _features.textureCompressionETC2 = true; _features.textureCompressionASTC_LDR = true; + _features.shaderInt64 = mslVersionIsAtLeast(MTLLanguageVersion2_3) && supportsMTLGPUFamily(Apple3); if (supportsMTLFeatureSet(tvOS_GPUFamily1_v3)) { _features.dualSrcBlend = true; @@ -1603,6 +1604,7 @@ void MVKPhysicalDevice::initFeatures() { #if MVK_IOS _features.textureCompressionETC2 = true; + _features.shaderInt64 = mslVersionIsAtLeast(MTLLanguageVersion2_3) && supportsMTLGPUFamily(Apple3); if (supportsMTLFeatureSet(iOS_GPUFamily2_v1)) { _features.textureCompressionASTC_LDR = true; @@ -1645,6 +1647,7 @@ void MVKPhysicalDevice::initFeatures() { _features.depthClamp = true; _features.vertexPipelineStoresAndAtomics = true; _features.fragmentStoresAndAtomics = true; + _features.shaderInt64 = mslVersionIsAtLeast(MTLLanguageVersion2_3); _features.shaderStorageImageArrayDynamicIndexing = _metalFeatures.arrayOfTextures; @@ -1719,7 +1722,7 @@ void MVKPhysicalDevice::initFeatures() { // VkBool32 shaderClipDistance; // done // VkBool32 shaderCullDistance; // VkBool32 shaderFloat64; -// VkBool32 shaderInt64; +// VkBool32 shaderInt64; // done // VkBool32 shaderInt16; // done // VkBool32 shaderResourceResidency; // VkBool32 shaderResourceMinLod; // done diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm index db7b6cf3..10348e20 100644 --- a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm +++ b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm @@ -71,7 +71,11 @@ bool mvk::compile(const string& mslSourceCode, #define mslVer(MJ, MN, PT) mslVersionMajor == MJ && mslVersionMinor == MN && mslVersionPoint == PT MTLLanguageVersion mslVerEnum = (MTLLanguageVersion)0; - if (mslVer(2, 1, 0)) { + if (mslVer(2, 3, 0)) { + mslVerEnum = MTLLanguageVersion2_3; + } else if (mslVer(2, 2, 0)) { + mslVerEnum = MTLLanguageVersion2_2; + } else if (mslVer(2, 1, 0)) { mslVerEnum = MTLLanguageVersion2_1; } else if (mslVer(2, 0, 0)) { mslVerEnum = MTLLanguageVersion2_0;