-
Notifications
You must be signed in to change notification settings - Fork 454
Vulkan 1.3 requirements #1930
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Ref: haasn/libplacebo#174 |
In regards to VK_KHR_shader_integer_dot_product I came across Which led to me. -https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/compiler/nir/nir_opcodes.py#L1367 Hopefully this can be useful. |
That bit of code you highlighted is for a packed saturating vertical add. That's only part of three of the new instructions added by that extension. Metal already has that (as |
By that, you mean adding the required synthetic functions to SPIRV-Cross? |
Yes. |
gfx-rs/naga#1689 People of webgpu seem to have dealt with dot product with integers on Metal. |
Been studying spirv-cross code and other alternatives like naga and tint (really nice code) . Tint - https://dawn.googlesource.com/tint/+/refs/heads/main/src/tint/writer/msl/generator_impl.cc#681 It should be implemented something like that (to support some integer dot) here no? https://github.com/KhronosGroup/SPIRV-Cross/blob/main/spirv_msl.cpp#L5414 |
btw |
Hi, just want to confirm that until this is supported only 1.x DXVK releases are compatible with MoltenVK. Do I understand that right? Thanks yall are awesome. |
Yes, that is correct. Hopefully, you won't have to wait much longer... |
Should I be able to use dynamic rendering without the Ext function pointers? |
No. That's invalid usage of Vulkan, as 1.3 is not advertised. Your problem is easily avoidable anyway, just use an if to switch between loading the core function and the extension function, based on the physical device API version. The functions have the same signature, and the structures didn't change from the promotion, so its all backwards compatible. |
I just by accident found another extension which was made core with Vulkan 1.3, but was not listed in the Appendix you linked in the original post.
Seems like this could just be emulated with Also, perhaps we missed some other things found here that need to be supported. |
Actually, this was also added via Since MoltenVK already supports
Hmmm...as part of the description above, the spec also includes:
With this in mind, my interpretation of the difference between And I read the "If values are written..." part to mean, "If you write when you said you wouldn't, we're not going to save the changes, and you've messed it up already, so we're not going to bother retaining it". With all that in mind, I think
Good catch. I've added this to the main section above. |
Just want to note that |
Thanks! Nice catch! |
I'm working on Note that full CTS compliance related to the extension requires the bugfix as in #2434 (an independent specialization constant issue unrelated to the extension itself). The proper fix also requires a small API addition on SPIRV-Cross side to give us the required knowledge. I'll try to have an updated version for upstream ready in a few days. |
Is there any fundamental difficulty with implementing |
It's just added in #2424 |
Looking forward to it! Thanks for your work! I couldn't review the commit you linked inline, but when you submit a PR:
|
Since Vulkan 1.3 seems fairly imminent, I figured I'd summarise what will be needed for Vulkan 1.4 (will need a separate issue at some point, of course).
|
Maybe add a column if its really a thing that needs to be supported, or an extension that promoted to core but is still an optional feature |
does shader object extension is currently supported? |
@QuantumDeveloper That's not really possible to support because Metal uses proper pipelines everywhere. |
Isn't |
Going by KhronosGroup/Vulkan-Docs#1747, it seems that most promoted extension features (which would include maintenance4) are promoted as required unless stated otherwise, same as they are required in the original extension. |
Ok, I found the relevant part of the spec. Quite confusing that it isn't listed with the struct definition itself, suggesting all features are optional. |
PR #2489 competes this issue. |
Congrats! |
Appendix D of the Vulkan spec and the VK_VERSION_1_3 man page summarize the extension list below, and adds additional Vulkan 1.3 enhancement requirements.
Support
VK_KHR_copy_commands2
VK_KHR_dynamic_rendering
VK_KHR_format_feature_flags2
VK_KHR_maintenance4
VK_KHR_shader_integer_dot_product
VK_KHR_shader_non_semantic_info
VK_KHR_shader_terminate_invocation
VK_KHR_synchronization2
VK_KHR_zero_initialize_workgroup_memory
VK_EXT_4444_formats
VK_EXT_extended_dynamic_state
VK_EXT_extended_dynamic_state2
VK_EXT_image_robustness
VK_EXT_inline_uniform_block
VK_EXT_pipeline_creation_cache_control
VK_EXT_pipeline_creation_feedback
VK_EXT_private_data
VK_EXT_shader_demote_to_helper_invocation
VK_EXT_subgroup_size_control
VK_EXT_texel_buffer_alignment
VK_EXT_texture_compression_astc_hdr
VK_EXT_tooling_info
VK_EXT_ycbcr_2plane_444_formats
In addition to the promoted extensions described above, Vulkan 1.3 added required support for:
bufferDeviceAddress
feature which indicates support for accessing memory in shaders as storage buffers viavkGetBufferDeviceAddress
.vulkanMemoryModel
andvulkanMemoryModelDeviceScope
features, which indicate support for the corresponding Vulkan Memory Model capabilities.maxInlineUniformTotalSize
limit is added to provide the total size of all inline uniform block bindings in a pipeline layout.Additional details of functionality and information that may need to be included in a 1.3 implementation can be found here.
The text was updated successfully, but these errors were encountered: