July 2022 Turnip Status Update
There is a steady progress being made since Turnip is Vulkan 1.1 Conformant . We now support GL 4.6 via Zink, implemented a lot of extensions, and are close to Vulkan 1.3 conformance.
Support of real-world games is also looking good, here is a video of Adreno 660 rendering “The Witcher 3”, “The Talos Principle”, and “OMD2”:
All of them have reasonable frame rate. However, there was a bit of “cheating” involved. Only “The Talos Principle” game was fully running on the development board (via box64), other two games were only rendered in real time on Adreno GPU, but were ran on x86-64 laptop with their VK commands being streamed to the dev board. You could read about this method in my post “Testing Vulkan drivers with games that cannot run on the target device”.
The video was captured directly on the device via OBS with obs-vkcapture, which worked surprisingly well after fighting a bunch of issues due to the lack of binary package for it and a bit dated Ubuntu installation.
Zink (GL over Vulkan)
A number of extensions were implemented that are required for Zink to support higher GL versions. As of now Turnip supports OpenGL 4.6 via Zink, and while yet not conformant - only a handful of GL CTS tests are failing. For the perspective, Freedreno (our GL driver for Adreno) supports only OpenGL 3.3.
For Zink adventures and profound post titles check out Mike Blumenkrantz’s awesome blog supergoodcode.com
If you are interested in Zink over Turnip bring up in particular, you should read:
Low Resolution Z improvements
A major improvement for low resolution Z optimization (LRZ) was recently made in Turnip, read about it in the previous post of mine: LRZ on Adreno GPUs
Extensions
Anyway, since the last update Turnip supports many more extensions (in no particular order):
- VK_KHR_swapchain_mutable_format
- VK_KHR_synchronization2
- VK_KHR_format_feature_flags2
- VK_KHR_shader_non_semantic_info
- VK_KHR_zero_initialize_workgroup_memory
- VK_KHR_copy_commands2
- VK_KHR_maintenance4
- VK_EXT_shader_module_identifier
- VK_EXT_border_color_swizzle
- VK_EXT_color_write_enable
- VK_EXT_image_2d_view_of_3d
- VK_EXT_pipeline_creation_cache_control
- VK_EXT_pipeline_creation_feedback
- VK_EXT_image_view_min_lod
- VK_EXT_primitives_generated_query
- VK_EXT_debug_utils
- VK_EXT_texel_buffer_alignment
- VK_EXT_display_control
- VK_EXT_depth_clip_control
- VK_EXT_physical_device_drm
- VK_EXT_image_robustness
- VK_EXT_primitive_topology_list_restart
- VK_EXT_subgroup_size_control
- VK_AMD_buffer_marker
- VK_ARM_rasterization_order_attachment_access
What about Vulkan conformance?
For Vulkan 1.3 conformance there are only a few extension left to implement. The only major ones are VK_KHR_dynamic_rendering and VK_EXT_inline_uniform_block required for Vulkan 1.3. VK_KHR_dynamic_rendering
is currently being reviewed and foundation for VK_EXT_inline_uniform_block
was recently merged.
That’s all for today!
Comments