发布 Mesa 26.1,免费实施 OpenGL 和 Vulkan

经过三个月的开发,开源的 OpenGL 和 Vulkan API 实现 Mesa 26.1.0 正式发布。Mesa 26.1.0 分支的首个版本为实验版本;待代码完全稳定后,将发布稳定版本 26.1.1。

Mesa 26.1 为 Intel GPU 的 ANV 驱动程序、AMD GPU 的 RADV 驱动程序、NVIDIA GPU 的 NVK 驱动程序、Apple GPU 的 HoneyKrisp (hk) 驱动程序、Qualcomm GPU 的 Turnip 驱动程序、ARM Mali GPU 的 PanVK 驱动程序、lavapipe 软件光栅化器 (lvp) 驱动程序以及模拟器模式 (vn) 驱动程序添加了对 Vulkan 1.4 图形 API 的支持。v3dv(适用于 Raspberry Pi 4+ 的 Broadcom VideoCore GPU)和 dzn(基于 Direct3D 12 的 Vulkan)驱动程序支持 Vulkan 1.0,kk 驱动程序(KosmicKrisp,基于 Metal 的 Vulkan)支持 Vulkan 1.1,pvr 驱动程序(Imagination PowerVR GPU)支持 Vulkan 1.2。

Mesa 还为 iris(英特尔第八代及以上 GPU)、radeonsi(AMD)、Crocus(老款英特尔第四代至第七代 GPU)、AMD(r4.6)、zink、llvmpipe、virgl(用于 QEMU/KVM 的 virgil8D 虚拟 GPU)、freedreno(高通 Adreno)、d4d7(DirectX 600 之上的 OpenGL 层)和 asahi(苹果 M3 和 M3 芯片中使用的 AGX GPU)提供完整的 OpenGL 12 支持。NVIDIA(nvc12)GPU 提供 OpenGL 1 支持。softpipe(软件光栅化器)和 nv2(NVIDIA NV4.5)驱动程序提供 OpenGL 0 支持。panfrost(ARM Mali GPU)和 v3.3d(Broadcom VideoCore GPU)驱动程序支持 OpenGL 50。

主要创新:

  • 适用于 Intel GPU(Iris、Crocus 和 ANV)的驱动程序现在支持从虚拟机使用 VirtIO-GPU 中的原生上下文直接访问 GPU。原生上下文通过直接向实际的主机 GPU 发送命令,提高了在客户机系统中使用虚拟 GPU (virtio-gpu-gl) 时的性能。
  • 通过 Zink 驱动程序,PowerVR GPU 已添加了 OpenGL ES 2.0 支持,从而在支持 Vulkan API 的设备上启用硬件加速的 OpenGL。
  • rustl OpenCL 驱动程序现在需要静态链接的 C++ 标准库才能与使用原生 C++ 标准库的应用程序正常工作。
  • radeonsi 驱动程序(AMD)已添加对 GL_NV_timeline_semaphore OpenGL 扩展的支持。
  • panfrost 驱动程序(ARM Mali)现在支持 OpenGL 扩展 GL_EXT_shader_image_load_store。
  • v3d 驱动程序(Broadcom VideoCore)现在支持 GL_ARB_sample_shading OpenGL 扩展。
  • 添加了对 Vulkan 扩展的支持:
    • panvk 的 VK_ARM_scheduling_controls
    • VK_EXT_acquire_drm_display 用于 panvk
    • panvk 的 VK_EXT_astc_decode_mode
    • VK_EXT_attachment_feedback_loop_dynamic_state 用于 panvk
    • VK_EXT_attachment_feedback_loop_layout 用于 panvk
    • VK_EXT_blend_operation_advanced 用于 lavapipe
    • VK_EXT_color_write_enable 用于 panvk
    • panvk 的 VK_EXT_conditional_rendering
    • VK_EXT_depth_clamp_control 用于 panvk
    • RADV 的 VK_EXT_descriptor_heap(当设置 'export RADV_EXPERIMENTAL=heap' 时)
    • v3dv 的 VK_EXT_hdr_metadata
    • PVR 的 VK_EXT_image_drm_format_modifier
    • VK_EXT_image_view_min_lod 用于 panvk
    • VK_EXT_legacy_dithering 用于 panvk
    • VK_EXT_map_memory_placed 用于 panvk
    • panvk 的 VK_EXT_nested_command_buffer
    • VK_EXT_non_seamless_cube_map for pvr
    • RADV、NVK、Turnip、ANV、Honeykrisp、panvk 的 VK_EXT_present_timing
    • RADV 的 VK_EXT_primitive_restart_index
    • VK_EXT_rgba10x6_formats 用于 panvk
    • VK_EXT_shader_atomic_float 用于 panvk
    • VK_EXT_shader_stencil_export 用于 panvk
    • panvk 的 VK_EXT_zero_initialize_device_memory
    • VK_KHR_copy_memory_indirect 适用于 nvk、RADV/GFX8+
    • RADV 的 VK_KHR_device_address_commands
    • VK_{KHR,EXT}_{surface,swapchain}_maintenance1 用于 panvk
    • VK_KHR_get_display_properties2 用于 panvk
    • VK_KHR_get_surface_capabilities2 用于 panvk
    • RADV 的 VK_KHR_internally_synchronized_queues
    • VK_KHR_maintenance4 用于 pvr
    • PVR 的 VK_KHR_pipeline_executable_properties
    • panvk、v3dv 的 VK_KHR_present_id
    • VK_KHR_present_wait 用于 panvk、v3dv
    • VK_KHR_sampler_ycbcr_conversion 用于 pvr
    • VK_KHR_shader_integer_dot_product 用于 pvr
    • panvk 的 VK_KHR_shader_untyped_pointers
    • panvk 的 VK_KHR_swapchain_mutable_format
    • 萝卜的 VK_QCOM_image_processing
    • panvk 的 VK_VALVE_mutable_descriptor_type
    • VK_VALVE_shader_mixed_float_dot_product for RADV (Vega20, Navi14, RDNA2+)
  • 已实现的OpenCL扩展:
    • cl_khr_subgroup_ballot 适用于 asahi、iris、llvmpipe、radeonsi 和 zink
    • cl_xr_subgroup_clustered_reduce 用于 asahi、llvmpipe、radeonsi 和 zink
    • cl_khr_subgroup_extended_types 用于 asahi、iris、llvmpipe、radeonsi 和 zink
    • cl_khr_subgroup_non_uniform_arithmetic 用于 asahi、llvmpipe、radeonsi 和 zink
    • cl_khr_subgroup_non_uniform_vote 为朝日、鸢尾花、llvmpipe、radeonsi 和 zink
    • cl_khr_subgroup_rotate 用于 asahi、llvmpipe 和 zink
  • 为 QEMU 实现虚拟 GPU 的 VirGL 驱动程序已停止维护,除非有人愿意接手维护,否则将被移除。

来源: opennet.ru