Skip to content

Commit 1b4979a

Browse files
authored
Merge pull request KhronosGroup#2522 from squidbus/misc-exts
Add support for a few miscellaneous small extensions
2 parents 93a6739 + 7bae8fd commit 1b4979a

File tree

5 files changed

+229
-199
lines changed

5 files changed

+229
-199
lines changed

Docs/MoltenVK_Runtime_UserGuide.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,16 +283,19 @@ In addition to core *Vulkan* functionality, **MoltenVK** also supports the foll
283283
- `VK_KHR_shader_float_controls`
284284
- `VK_KHR_shader_float16_int8`
285285
- `VK_KHR_shader_integer_dot_product`
286+
- `VK_KHR_shader_maximal_reconvergence`
286287
- `VK_KHR_shader_non_semantic_info`
287288
- `VK_KHR_shader_relaxed_extended_instruction`
288289
- `VK_KHR_shader_subgroup_extended_types`
289290
- *Requires Metal 2.1 on Mac or Metal 2.2 and Apple family 4 on iOS.*
290291
- `VK_KHR_shader_subgroup_rotate`
291292
- *Requires Metal 2.1 on Mac or Metal 2.2 and Apple family 4 on iOS.*
293+
- `VK_KHR_shader_subgroup_uniform_control_flow`
292294
- `VK_KHR_shader_terminate_invocation`
293295
- `VK_KHR_spirv_1_4`
294296
- `VK_KHR_storage_buffer_storage_class`
295297
- `VK_KHR_surface`
298+
- `VK_KHR_surface_protected_capabilities`
296299
- `VK_KHR_swapchain`
297300
- `VK_KHR_swapchain_mutable_format`
298301
- `VK_KHR_synchronization2`

Docs/Whats_New.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ Released TBD
2424
- `VK_KHR_maintenance8`
2525
- `VK_KHR_present_id`
2626
- `VK_KHR_present_wait`
27+
- `VK_KHR_shader_maximal_reconvergence`
2728
- `VK_KHR_shader_relaxed_extended_instruction`
29+
- `VK_KHR_shader_subgroup_uniform_control_flow`
30+
- `VK_KHR_surface_protected_capabilities`
2831
- Update to latest SPIRV-Cross:
2932
- MSL: Add support for `DebugPrintf`.
3033
- MSL: Fix crash due to regression caused by recent changes to location calculations.

MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,11 @@
555555
shaderExpectAssume->shaderExpectAssume = true;
556556
break;
557557
}
558+
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: {
559+
auto* shaderReconvergenceFeatures = (VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR*)next;
560+
shaderReconvergenceFeatures->shaderMaximalReconvergence = _gpuCapabilities.isAppleGPU;
561+
break;
562+
}
558563
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR: {
559564
auto* shaderRelaxedFeatures = (VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR*)next;
560565
shaderRelaxedFeatures->shaderRelaxedExtendedInstruction = true;
@@ -566,6 +571,11 @@
566571
shaderSGRotateFeatures->shaderSubgroupRotateClustered = _metalFeatures.simdPermute || _metalFeatures.quadPermute;
567572
break;
568573
}
574+
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: {
575+
auto* shaderSGUniformFeatures = (VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR*)next;
576+
shaderSGUniformFeatures->shaderSubgroupUniformControlFlow = _gpuCapabilities.isAppleGPU;
577+
break;
578+
}
569579
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: {
570580
auto* formatFeatures = (VkPhysicalDevice4444FormatsFeaturesEXT*)next;
571581
bool canSupport4444 = _metalFeatures.tileBasedDeferredRendering &&
@@ -1772,6 +1782,11 @@
17721782
pCompatibility = (VkSurfacePresentModeCompatibilityEXT*)next;
17731783
break;
17741784
}
1785+
case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR: {
1786+
// Not supported.
1787+
((VkSurfaceProtectedCapabilitiesKHR*)next)->supportsProtected = false;
1788+
break;
1789+
}
17751790
default:
17761791
break;
17771792
}
@@ -3657,6 +3672,10 @@ static uint32_t mvkGetEntryProperty(io_registry_entry_t entry, CFStringRef prope
36573672
MVKExtensionList* pWritableExtns = (MVKExtensionList*)&_supportedExtensions;
36583673
pWritableExtns->disableAllButEnabledDeviceExtensions();
36593674

3675+
if (!_gpuCapabilities.isAppleGPU) {
3676+
pWritableExtns->vk_KHR_shader_subgroup_uniform_control_flow.enabled = false;
3677+
pWritableExtns->vk_KHR_shader_maximal_reconvergence.enabled = false;
3678+
}
36603679
if (!_metalFeatures.samplerMirrorClampToEdge) {
36613680
pWritableExtns->vk_KHR_sampler_mirror_clamp_to_edge.enabled = false;
36623681
}

MoltenVK/MoltenVK/GPUObjects/MVKDeviceFeatureStructs.def

Lines changed: 62 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -35,66 +35,68 @@
3535
#pragma push_macro("INTEL")
3636
#undef INTEL
3737

38-
MVK_DEVICE_FEATURE(16BitStorage, 16BIT_STORAGE, 4)
39-
MVK_DEVICE_FEATURE(8BitStorage, 8BIT_STORAGE, 3)
40-
MVK_DEVICE_FEATURE(BufferDeviceAddress, BUFFER_DEVICE_ADDRESS, 3)
41-
MVK_DEVICE_FEATURE(DescriptorIndexing, DESCRIPTOR_INDEXING, 20)
42-
MVK_DEVICE_FEATURE(DynamicRendering, DYNAMIC_RENDERING, 1)
43-
MVK_DEVICE_FEATURE(GlobalPriorityQuery, GLOBAL_PRIORITY_QUERY, 1)
44-
MVK_DEVICE_FEATURE(HostQueryReset, HOST_QUERY_RESET, 1)
45-
MVK_DEVICE_FEATURE(ImagelessFramebuffer, IMAGELESS_FRAMEBUFFER, 1)
46-
MVK_DEVICE_FEATURE(ImageRobustness, IMAGE_ROBUSTNESS, 1)
47-
MVK_DEVICE_FEATURE(IndexTypeUint8, INDEX_TYPE_UINT8, 1)
48-
MVK_DEVICE_FEATURE(InlineUniformBlock, INLINE_UNIFORM_BLOCK, 2)
49-
MVK_DEVICE_FEATURE(Maintenance4, MAINTENANCE_4, 1)
50-
MVK_DEVICE_FEATURE(Multiview, MULTIVIEW, 3)
51-
MVK_DEVICE_FEATURE(PipelineCreationCacheControl, PIPELINE_CREATION_CACHE_CONTROL, 1)
52-
MVK_DEVICE_FEATURE(PrivateData, PRIVATE_DATA, 1)
53-
MVK_DEVICE_FEATURE(ProtectedMemory, PROTECTED_MEMORY, 1)
54-
MVK_DEVICE_FEATURE(SamplerYcbcrConversion, SAMPLER_YCBCR_CONVERSION, 1)
55-
MVK_DEVICE_FEATURE(ScalarBlockLayout, SCALAR_BLOCK_LAYOUT, 1)
56-
MVK_DEVICE_FEATURE(SeparateDepthStencilLayouts, SEPARATE_DEPTH_STENCIL_LAYOUTS, 1)
57-
MVK_DEVICE_FEATURE(ShaderDemoteToHelperInvocation, SHADER_DEMOTE_TO_HELPER_INVOCATION, 1)
58-
MVK_DEVICE_FEATURE(ShaderDrawParameters, SHADER_DRAW_PARAMETERS, 1)
59-
MVK_DEVICE_FEATURE(ShaderAtomicInt64, SHADER_ATOMIC_INT64, 2)
60-
MVK_DEVICE_FEATURE(ShaderFloat16Int8, SHADER_FLOAT16_INT8, 2)
61-
MVK_DEVICE_FEATURE(ShaderIntegerDotProduct, SHADER_INTEGER_DOT_PRODUCT, 1)
62-
MVK_DEVICE_FEATURE(ShaderSubgroupExtendedTypes, SHADER_SUBGROUP_EXTENDED_TYPES, 1)
63-
MVK_DEVICE_FEATURE(ShaderTerminateInvocation, SHADER_TERMINATE_INVOCATION, 1)
64-
MVK_DEVICE_FEATURE(SubgroupSizeControl, SUBGROUP_SIZE_CONTROL, 2)
65-
MVK_DEVICE_FEATURE(Synchronization2, SYNCHRONIZATION_2, 1)
66-
MVK_DEVICE_FEATURE(TextureCompressionASTCHDR, TEXTURE_COMPRESSION_ASTC_HDR, 1)
67-
MVK_DEVICE_FEATURE(TimelineSemaphore, TIMELINE_SEMAPHORE, 1)
68-
MVK_DEVICE_FEATURE(UniformBufferStandardLayout, UNIFORM_BUFFER_STANDARD_LAYOUT, 1)
69-
MVK_DEVICE_FEATURE(VariablePointer, VARIABLE_POINTER, 2)
70-
MVK_DEVICE_FEATURE(VulkanMemoryModel, VULKAN_MEMORY_MODEL, 3)
71-
MVK_DEVICE_FEATURE(ZeroInitializeWorkgroupMemory, ZERO_INITIALIZE_WORKGROUP_MEMORY, 1)
72-
MVK_DEVICE_FEATURE_EXTN(FragmentShaderBarycentric, FRAGMENT_SHADER_BARYCENTRIC, KHR, 1)
73-
MVK_DEVICE_FEATURE_EXTN(Maintenance5, MAINTENANCE_5, KHR, 1)
74-
MVK_DEVICE_FEATURE_EXTN(Maintenance6, MAINTENANCE_6, KHR, 1)
75-
MVK_DEVICE_FEATURE_EXTN(Maintenance7, MAINTENANCE_7, KHR, 1)
76-
MVK_DEVICE_FEATURE_EXTN(Maintenance8, MAINTENANCE_8, KHR, 1)
77-
MVK_DEVICE_FEATURE_EXTN(PortabilitySubset, PORTABILITY_SUBSET, KHR, 15)
78-
MVK_DEVICE_FEATURE_EXTN(PresentId, PRESENT_ID, KHR, 1)
79-
MVK_DEVICE_FEATURE_EXTN(PresentWait, PRESENT_WAIT, KHR, 1)
80-
MVK_DEVICE_FEATURE_EXTN(ShaderExpectAssume, SHADER_EXPECT_ASSUME, KHR, 1)
81-
MVK_DEVICE_FEATURE_EXTN(ShaderRelaxedExtendedInstruction, SHADER_RELAXED_EXTENDED_INSTRUCTION, KHR, 1)
82-
MVK_DEVICE_FEATURE_EXTN(ShaderSubgroupRotate, SHADER_SUBGROUP_ROTATE, KHR, 2)
83-
MVK_DEVICE_FEATURE_EXTN(4444Formats, 4444_FORMATS, EXT, 2)
84-
MVK_DEVICE_FEATURE_EXTN(DepthClipControl, DEPTH_CLIP_CONTROL, EXT, 1)
85-
MVK_DEVICE_FEATURE_EXTN(ExtendedDynamicState, EXTENDED_DYNAMIC_STATE, EXT, 1)
86-
MVK_DEVICE_FEATURE_EXTN(ExtendedDynamicState2, EXTENDED_DYNAMIC_STATE_2, EXT, 3)
87-
MVK_DEVICE_FEATURE_EXTN(ExtendedDynamicState3, EXTENDED_DYNAMIC_STATE_3, EXT, 31)
88-
MVK_DEVICE_FEATURE_EXTN(FragmentShaderInterlock, FRAGMENT_SHADER_INTERLOCK, EXT, 3)
89-
MVK_DEVICE_FEATURE_EXTN(HostImageCopy, HOST_IMAGE_COPY, EXT, 1)
90-
MVK_DEVICE_FEATURE_EXTN(Image2DViewOf3D, IMAGE_2D_VIEW_OF_3D, EXT, 2)
91-
MVK_DEVICE_FEATURE_EXTN(PipelineRobustness, PIPELINE_ROBUSTNESS, EXT, 1)
92-
MVK_DEVICE_FEATURE_EXTN(Robustness2, ROBUSTNESS_2, EXT, 3)
93-
MVK_DEVICE_FEATURE_EXTN(ShaderAtomicFloat, SHADER_ATOMIC_FLOAT, EXT, 12)
94-
MVK_DEVICE_FEATURE_EXTN(SwapchainMaintenance1, SWAPCHAIN_MAINTENANCE_1, EXT, 1)
95-
MVK_DEVICE_FEATURE_EXTN(TexelBufferAlignment, TEXEL_BUFFER_ALIGNMENT, EXT, 1)
96-
MVK_DEVICE_FEATURE_EXTN(VertexAttributeDivisor, VERTEX_ATTRIBUTE_DIVISOR, EXT, 2)
97-
MVK_DEVICE_FEATURE_EXTN(ShaderIntegerFunctions2, SHADER_INTEGER_FUNCTIONS_2, INTEL, 1)
38+
MVK_DEVICE_FEATURE(16BitStorage, 16BIT_STORAGE, 4)
39+
MVK_DEVICE_FEATURE(8BitStorage, 8BIT_STORAGE, 3)
40+
MVK_DEVICE_FEATURE(BufferDeviceAddress, BUFFER_DEVICE_ADDRESS, 3)
41+
MVK_DEVICE_FEATURE(DescriptorIndexing, DESCRIPTOR_INDEXING, 20)
42+
MVK_DEVICE_FEATURE(DynamicRendering, DYNAMIC_RENDERING, 1)
43+
MVK_DEVICE_FEATURE(GlobalPriorityQuery, GLOBAL_PRIORITY_QUERY, 1)
44+
MVK_DEVICE_FEATURE(HostQueryReset, HOST_QUERY_RESET, 1)
45+
MVK_DEVICE_FEATURE(ImagelessFramebuffer, IMAGELESS_FRAMEBUFFER, 1)
46+
MVK_DEVICE_FEATURE(ImageRobustness, IMAGE_ROBUSTNESS, 1)
47+
MVK_DEVICE_FEATURE(IndexTypeUint8, INDEX_TYPE_UINT8, 1)
48+
MVK_DEVICE_FEATURE(InlineUniformBlock, INLINE_UNIFORM_BLOCK, 2)
49+
MVK_DEVICE_FEATURE(Maintenance4, MAINTENANCE_4, 1)
50+
MVK_DEVICE_FEATURE(Multiview, MULTIVIEW, 3)
51+
MVK_DEVICE_FEATURE(PipelineCreationCacheControl, PIPELINE_CREATION_CACHE_CONTROL, 1)
52+
MVK_DEVICE_FEATURE(PrivateData, PRIVATE_DATA, 1)
53+
MVK_DEVICE_FEATURE(ProtectedMemory, PROTECTED_MEMORY, 1)
54+
MVK_DEVICE_FEATURE(SamplerYcbcrConversion, SAMPLER_YCBCR_CONVERSION, 1)
55+
MVK_DEVICE_FEATURE(ScalarBlockLayout, SCALAR_BLOCK_LAYOUT, 1)
56+
MVK_DEVICE_FEATURE(SeparateDepthStencilLayouts, SEPARATE_DEPTH_STENCIL_LAYOUTS, 1)
57+
MVK_DEVICE_FEATURE(ShaderDemoteToHelperInvocation, SHADER_DEMOTE_TO_HELPER_INVOCATION, 1)
58+
MVK_DEVICE_FEATURE(ShaderDrawParameters, SHADER_DRAW_PARAMETERS, 1)
59+
MVK_DEVICE_FEATURE(ShaderAtomicInt64, SHADER_ATOMIC_INT64, 2)
60+
MVK_DEVICE_FEATURE(ShaderFloat16Int8, SHADER_FLOAT16_INT8, 2)
61+
MVK_DEVICE_FEATURE(ShaderIntegerDotProduct, SHADER_INTEGER_DOT_PRODUCT, 1)
62+
MVK_DEVICE_FEATURE(ShaderSubgroupExtendedTypes, SHADER_SUBGROUP_EXTENDED_TYPES, 1)
63+
MVK_DEVICE_FEATURE(ShaderTerminateInvocation, SHADER_TERMINATE_INVOCATION, 1)
64+
MVK_DEVICE_FEATURE(SubgroupSizeControl, SUBGROUP_SIZE_CONTROL, 2)
65+
MVK_DEVICE_FEATURE(Synchronization2, SYNCHRONIZATION_2, 1)
66+
MVK_DEVICE_FEATURE(TextureCompressionASTCHDR, TEXTURE_COMPRESSION_ASTC_HDR, 1)
67+
MVK_DEVICE_FEATURE(TimelineSemaphore, TIMELINE_SEMAPHORE, 1)
68+
MVK_DEVICE_FEATURE(UniformBufferStandardLayout, UNIFORM_BUFFER_STANDARD_LAYOUT, 1)
69+
MVK_DEVICE_FEATURE(VariablePointer, VARIABLE_POINTER, 2)
70+
MVK_DEVICE_FEATURE(VulkanMemoryModel, VULKAN_MEMORY_MODEL, 3)
71+
MVK_DEVICE_FEATURE(ZeroInitializeWorkgroupMemory, ZERO_INITIALIZE_WORKGROUP_MEMORY, 1)
72+
MVK_DEVICE_FEATURE_EXTN(FragmentShaderBarycentric, FRAGMENT_SHADER_BARYCENTRIC, KHR, 1)
73+
MVK_DEVICE_FEATURE_EXTN(Maintenance5, MAINTENANCE_5, KHR, 1)
74+
MVK_DEVICE_FEATURE_EXTN(Maintenance6, MAINTENANCE_6, KHR, 1)
75+
MVK_DEVICE_FEATURE_EXTN(Maintenance7, MAINTENANCE_7, KHR, 1)
76+
MVK_DEVICE_FEATURE_EXTN(Maintenance8, MAINTENANCE_8, KHR, 1)
77+
MVK_DEVICE_FEATURE_EXTN(PortabilitySubset, PORTABILITY_SUBSET, KHR, 15)
78+
MVK_DEVICE_FEATURE_EXTN(PresentId, PRESENT_ID, KHR, 1)
79+
MVK_DEVICE_FEATURE_EXTN(PresentWait, PRESENT_WAIT, KHR, 1)
80+
MVK_DEVICE_FEATURE_EXTN(ShaderExpectAssume, SHADER_EXPECT_ASSUME, KHR, 1)
81+
MVK_DEVICE_FEATURE_EXTN(ShaderMaximalReconvergence, SHADER_MAXIMAL_RECONVERGENCE, KHR, 1)
82+
MVK_DEVICE_FEATURE_EXTN(ShaderRelaxedExtendedInstruction, SHADER_RELAXED_EXTENDED_INSTRUCTION, KHR, 1)
83+
MVK_DEVICE_FEATURE_EXTN(ShaderSubgroupRotate, SHADER_SUBGROUP_ROTATE, KHR, 2)
84+
MVK_DEVICE_FEATURE_EXTN(ShaderSubgroupUniformControlFlow, SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW, KHR, 1)
85+
MVK_DEVICE_FEATURE_EXTN(4444Formats, 4444_FORMATS, EXT, 2)
86+
MVK_DEVICE_FEATURE_EXTN(DepthClipControl, DEPTH_CLIP_CONTROL, EXT, 1)
87+
MVK_DEVICE_FEATURE_EXTN(ExtendedDynamicState, EXTENDED_DYNAMIC_STATE, EXT, 1)
88+
MVK_DEVICE_FEATURE_EXTN(ExtendedDynamicState2, EXTENDED_DYNAMIC_STATE_2, EXT, 3)
89+
MVK_DEVICE_FEATURE_EXTN(ExtendedDynamicState3, EXTENDED_DYNAMIC_STATE_3, EXT, 31)
90+
MVK_DEVICE_FEATURE_EXTN(FragmentShaderInterlock, FRAGMENT_SHADER_INTERLOCK, EXT, 3)
91+
MVK_DEVICE_FEATURE_EXTN(HostImageCopy, HOST_IMAGE_COPY, EXT, 1)
92+
MVK_DEVICE_FEATURE_EXTN(Image2DViewOf3D, IMAGE_2D_VIEW_OF_3D, EXT, 2)
93+
MVK_DEVICE_FEATURE_EXTN(PipelineRobustness, PIPELINE_ROBUSTNESS, EXT, 1)
94+
MVK_DEVICE_FEATURE_EXTN(Robustness2, ROBUSTNESS_2, EXT, 3)
95+
MVK_DEVICE_FEATURE_EXTN(ShaderAtomicFloat, SHADER_ATOMIC_FLOAT, EXT, 12)
96+
MVK_DEVICE_FEATURE_EXTN(SwapchainMaintenance1, SWAPCHAIN_MAINTENANCE_1, EXT, 1)
97+
MVK_DEVICE_FEATURE_EXTN(TexelBufferAlignment, TEXEL_BUFFER_ALIGNMENT, EXT, 1)
98+
MVK_DEVICE_FEATURE_EXTN(VertexAttributeDivisor, VERTEX_ATTRIBUTE_DIVISOR, EXT, 2)
99+
MVK_DEVICE_FEATURE_EXTN(ShaderIntegerFunctions2, SHADER_INTEGER_FUNCTIONS_2, INTEL, 1)
98100

99101
#pragma pop_macro("INTEL")
100102
#undef MVK_DEVICE_FEATURE_EXTN

0 commit comments

Comments
 (0)