考虑到现代视频卡在Windows系统上使用DirectX API的驱动实现,我想知道为什么这种实现在非Windows系统上没有提供,尤其是在Linux系统上。
考虑到这种功能的明显缺失,我只能假设存在我无法理解的充分理由。但是,在我较为基本的认识中,我只将DirectX调用视为硬件设备上的函数入口点。并且声明一下,我不是指兼容性层(尤其是WINE,这是一个每天都让我感到惊奇的项目),而是直接进行硬件调用的库。
是否可能创建一个开源版本的DirectX?这可能是可行的,但会非常困难吗?
考虑到现代视频卡在Windows系统上使用DirectX API的驱动实现,我想知道为什么这种实现在非Windows系统上没有提供,尤其是在Linux系统上。
考虑到这种功能的明显缺失,我只能假设存在我无法理解的充分理由。但是,在我较为基本的认识中,我只将DirectX调用视为硬件设备上的函数入口点。并且声明一下,我不是指兼容性层(尤其是WINE,这是一个每天都让我感到惊奇的项目),而是直接进行硬件调用的库。
是否可能创建一个开源版本的DirectX?这可能是可行的,但会非常困难吗?
据我所知,DirectX包含三个部分
在Linux上没有驱动程序提供DX定义的低级API,因此即使可能提供了DirectX库,如果没有适当的供应商驱动程序,它也将无法工作,而且我看不到有任何供应商会为其硬件平台创建这样的驱动程序。
已停用但仍受支持的DirectX组件包括:
可以看出,DirectX API套件的许多部分需要重新编写功能以适应Linux驱动程序。此外,DirectX套件的某些部分可能会调用Windows操作系统,并且该代码必须在不侵犯DirectX或Windows操作系统的版权的情况下为Linux机器重写。
是的,您可以编写一个开源API套件,其功能与DirectX相同,适用于Linux,但是如果对Linux的声音和图形驱动程序/支持没有很好的了解,这将是一项非常艰巨的任务。
但是,如果您的问题更多地是“我能否获取/编写某些东西,以使使用DirectX制作的游戏和程序在Linux上运行?” 简而言之,由于更有可能侵犯版权,所以不能。
你的问题在2019年时是错误的。 DXVK 是一个使用Vulkan和Wine实现D3D11和D3D10的实现,
Mesa也有本地的Direct3D 9实现,但据我所知,除了Wine之外没有人使用它。
DirectX是专为微软目标设计的专有产品,因此这种情况发生非常不寻常
还有两个其他的软件可以考虑,SDL和OpenGL
OpenGL提供了与DirectX相对应的硬件选择,而SDL与OpenGL配合使用,提供了您从DirectX中期望的软件支持
自2020年以来,微软一直在努力将DirectX 12移植到WSL2中,这是在this repository中完成的。在邮件列表中,Steve Pronovost评论说,他们可能会努力将此驱动程序移植到Linux上,以使其本地运行。
但是,为了做到这一点,他们需要在内核的DRM堆栈之上实现驱动程序,如果他们想保持驱动程序类似于Windows并具有相关API,则需要修改DRM堆栈本身。
Mesa库也正在进行一些工作,以支持D3D12,主要目的是优化机器学习算法中广泛使用的服务器端GPU计算。
尽管这很棒,但我们不太可能在Linux上运行Windows游戏时看到任何优势。只有当更多的游戏开始支持比DirectX更快、更好的Vulkan时,开源社区才会占据上风。虽然已经有一些实验表明,在Windows上使用DXVK比DirectX 9甚至11更快,例如here中提到的那个实验,但DXVK往往不太可靠,容易出现错误和崩溃。