D3D9On12是一个映射层,它将图形命令从DirectX9映射到DirectX12。D3D9On12不是DirectXAPI的实现,而是D3D9usermodeDDI(设备驱动接口)的实现。这意味着它不是一个名为d3d9.dll的二进制文件,而是名为d3d9on12.dll。
当一个应用程序创建一个D3D9设备时,他们可能会选择它是一个D3D9On12设备,而不是一个原生D3D9设备。当这种情况发生时,d3d9on12.dll会被D3D9运行时加载并初始化。当应用程序调用渲染命令时,D3D9将验证这些命令,然后将这些命令转换为D3D9的DDI并发送给D3D9On12,就像任何D3D9驱动程序一样。D3D9On12将接收这些命令,并将其转换为D3D12API调用,这些调用会被D3D12运行时进一步验证,可选择包括D3D12调试层,然后将其转换为D3D12DDI并发送给D3D12驱动程序。
构建为了构建D3D9On12,必须安装WDK(WindowsDriverKit),以便为D3D9On12提供d3d10umddi.h,并生成D3D12TranslationLayer_WDK项目,它承载了一些解析DXBC着色器和容器所需的代码。如果D3D12TranslationLayer及其子项目D3D12TranslationLayer_WDK和DXBCParser还没有被包含,那么在用CMake构建时,D3D12TranslationLayer_WDK将从GitHub中获取。DxbcSigner.dll将自动从NuGet拉取。
兼容性如果可能,我们将尝试保持D3D9和D3D9On12之间的兼容性。
评论