Video driver display rotation


I am trying to modify an existing graphics driver to support rotation of
the display, similar to the effect you can get in various Intel graphics
controllers. Specifically, I have an LCD that is capable of VGA
resolution, but it is being driven in portrait mode and I want to use it
in landscape. The processor is an AMD Geode GX2, and I have the source
code for the normal graphics driver. The operating system is Windows XP.

Unfortunately, I don’t know the first thing about graphics drivers, so
sorry if I ask some stupid questions here.

I have managed to adapt the existing driver to display 480x640
(portrait) by tweaking the DEVMODEW structures that get passed back to
Windows from DrvGetModes. I was hoping that the Pivot software from would then be able to rotate that to 640x480,
but I haven’t had much luck getting it to work.

I then started looking at the dmDisplayOrientation field in DEVMODEW,
but I can’t find anything in the documentation that says how this field
is actually used. It doesn’t seem to make any difference if I change it
to DMDO_90 (and add the corresponding flag to dmFields).

Other alternatives that I can think of are creating a filter driver that
performs the rotation before passing the calls on down (I guess this is
probably what the Pivot software does) or do the rotation in every call
to the driver. However, both of these sound very complicated to me,
particularly when I look at all the calls that have to be managed.

Does anyone have any pointers to information about implementing this
sort of thing, or is there perhaps another newsgroup which is more
appropriate? Any information would be much appreciated.

(I sent this message to microsoft.public.development.device.drivers but
there was no response, so I’m hoping that someone here will be able to
illuminate me. From the archives of this list, I see there was at least
one person (“Nitin Kapoor”) who was trying to do something similar, but
I couldn’t find any definitive information. That was back in 2003 though)

Thanks for any help,

Simon King