But 90% of the effort in a VGA driver is in simulating functions that
modern graphics cards do in the hardware. Consider the following simple
problem: two lines in a poly line meet at a shallow angle, and the
specification is to use a miter join. However, at shallow angles, the
miter can get too long, so in these cases, you want to use a bevel join.
Do this at the bitmap level. Get it perfect. And this is one of the
simpler computations. Modern drivers don’t worry about this, they just
pass the request to the GPU.
So you want to do 3D graphics. In 3D, you begin to worry about kilo
triangles per second, with texture mappings applied according to a
transfer function. Hidden line elimination will be handled by the GPU, as
will the texture mapping. As far as I can tell, writing a VGA driver has
about as much relevance to this as writing a driver for a
punched-card-reader. A VGA driver works in 2D space; a 3D driver works in
3D space, which is more that 150% harder than a 2D driver (3/2). I know
someone who wrote the Linux NVidia driver, which he refers to as “the
NVidia operating system with a small Linux emulator attached” because the
source code for the NVidia driver is larger than the Linux core. I
suspect that writing a VGA driver would contribute little or nothing to
this effort.
Remember the observation that display driver knowledge is concentrated in
a very small number of companies. You would be spending a lot of time
learning a skill of limited opportunity. And knowing how to write a VGA
driver is neither relevant nor valuable. There seems to be a lot of
opportunity in Bluetooth, network, data acquisition, file systems, and
mini filters, and as cool as display drivers might be, modern display
drivers work with extremely sophisticated built-in capabities, and bear
about as much relation to VGA drivers as a modern high-performance race
car does to a Stanley Steamer. While I normally would not discourage
learning, I think this would be a pointless exercise with little return
for the considerable effort. Display drivers are almost, but not totally,
unlike all other drivers.
I suspect your professor has no idea what a modern high-performance GPU is
like, or how complex the software interface to a display card is now like.
The remaining 10% of the effort is understanding the complex interface to
the OS. Oh, yes, you might spend as much as a whole day writing the code
that actually talks to the VGA hardware registers. So “knowing the VGA
hardware” doesn’t buy you all that much traction on the steep learning
curve of Windows display drivers. Years ago, I was an expert in VGA
programming; I could make one tap-dance. I would never consider taking on
a Windows VGA driver project, because my knowledge about the VGA registers
and all the tricks I could do with it had no relevance. But writing all
the graphics functions, including clipping regions, optimizing the
performance for flood fills, lines and curves in the presence of clipping
regions, and a ton of other techniques of 2D graphics that I’ve learned
over the decades, and making sure that the interface to GDI is fully and
correctly implemented, is an amazing amount of effort.
I think you have no idea of what you are getting into.
Joe
There is no need, but i wants to learn. In future I want me to write
display driver. So clearly, that is very very complex. Hardware itself and
OS binding would of course make it hard to understand what was going on.
SO I have to start somewhere, and my professor said that “writing VGA for
some OS will be 1st step to write to learn display(3D) driver”. So I am
choosing Windows as it is the most used OS.
@Tim Roberts Sir – Where can I get this NT 3/4 DDK? I would like to
study the source code given for that VGA driver. Though it is out of date,
I personally think that basics would be the same.
NTDEV is sponsored by OSR
Visit the list at: http://www.osronline.com/showlists.cfm?list=ntdev
OSR is HIRING!! See http://www.osr.com/careers
For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars
To unsubscribe, visit the List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer