The free OSR Learning Library has more than 50 articles on a wide variety of topics about writing and debugging device drivers and Minifilters. From introductory level to advanced. All the articles have been recently reviewed and updated, and are written using the clear and definitive style you've come to expect from OSR over the years.
Check out The OSR Learning Library at: https://www.osr.com/osr-learning-library/
I'm beginning work on a WDDM driver for a custom-designed FPGA-based GPU. From what I've understood of the MSDN documentation, there is a minimum level of hardware functionality that is required to allow the driver to work with the D3D runtime, namely, that some level of programmable vertex and pixel processing be available. As it stands, my GPU is entirely fixed-function and does not support any programmable shading.
I do not really intend to have support for the D3D runtime (and given the shading requirements, I can not), instead using my own rendering API to perform any rendering. One thing I do want, however, is to have my hardware able to display the Windows desktop so the machine can be interacted with entirely through this custom GPU.
So, I've got a few questions before I start going down the long and incredibly complex path of building a full WDDM mini port driver:
- Is a WDDM driver appropriate here?
- Can I somehow have the driver inform the D3D runtime that programmable shading is unavailable, and have the runtime work around that restriction (using WARP and performing D3D rendering on the CPU, for example)?
- Would writing a KMDOD instead of a WDDM driver be a better way to go? Does such a driver provide ways to hook in when I want to stop displaying the Windows desktop and start rendering 3D scenes using my rendering API that would behave correctly from a user perspective?
I have already written a basic kernel-mode driver that can talk to the hardware and a user-mode implementation of my rendering API that work together to allow me to render scenes, but one of the goals of the project is that the GPU work as the only display output device in the system, and having the Windows desktop display through it is a requirement there. One thing that I have considered (but not yet decided) is potentially exposing an INT10h VGA interface from the hardware, which would let both the UEFI boot and the Basic Display Driver "just work" (as far as I understand), but I'd rather not do that unless there's no other option.
I would very much appreciate it if anyone familiar with this stuff give me some pointers on the best way to approach this!
|Upcoming OSR Seminars
|OSR has suspended in-person seminars due to the Covid-19 outbreak. But, don't miss your training! Attend via the internet instead!
|13-17 May 2024
|1-5 Apr 2024
|Internals & Software Drivers
|11-15 Mar 2024
|Writing WDF Drivers
|20-24 May 2024