It’s been a while since we last mentioned the D3D9On12 mapping layer. As a quick refresher, it maps D3D9 commands to D3D12 by acting as the D3D9 Device Driver Interface (DDI). Having this mapping layer enables older D3D9 applications to run on modern systems that may not have a D3D9 driver. Since the last blog post, we’ve added support for Alpha to Coverage extensions, done some bug fixing, and cleaned up the code base for open sourcing.
Why Open Source?
D3D9On12 has been a part of Windows 10 for a few years now, and over that time it has grown in stability and usage. Making it open source will:
- allow the community to contribute additional bug fixes or performance improvements
- serve as another example of how to use the D3D12TranslationLayer
- give those who are interested a peek at what a D3D9 DDI implementation looks like
DXBC Signer
While it has always been possible to generate your own DXIL (DirectX Intermediate Language) and then sign it by calling into dxil.dll
, there was no analog for DXBC (DirectX ByteCode). The only tool capable of signing DXBC was the HLSL compiler fxc.exe
. This meant that anyone wanting to generate DXBC had to first generate and then compile HLSL, rather than directly outputting DXBC. D3D9On12 converts shaders written for shader models 1-3 to shader model 4, so this was something that we needed to solve in order to make the mapping layer viable.
As part of open sourcing D3D9On12, we’re happy to announce the initial release of the DXBC Signer NuGet package. This package will allow you to sign arbitrary DXBC generated by your own tool chain, filling the same role that dxil.dll
does for DXIL. D3D9On12 uses it to sign the DXBC it generates when converting shaders to shader model 4.
Check it out for yourself
- Clone and build Direct3D9On12 (GitHub), or just take a look at the README there for more info
- Use the DxbcSigner NuGet package
Neat, I didn’t know this happened so recently when I opened the new repo’s first Issue (https://github.com/microsoft/D3D9On12/issues/2) only a few days ago!