XFree86 4.3, SDL, and Resolution Changing

There appears to be a pretty major problem between SDL and XFree86 4.3 when
it comes to changing resolutions. When I play Unreal Tournament 2003, I
usually play at 800x600 but my desktop is 1024x768. That change worked fine
in Mandrake 9.0, but now there are problems in Mandrake 9.1.

Mandrake 9.1 uses XFree86 4.3 and libSDL 1.2.5. When I start UT2K3, my
monitor’s refresh rate changes to 72Hz (it should be 85Hz; my monitor can
display its refresh rate). As a result, the picture is skewed to the left
and smaller than it should be. I had the same problem with the Neverwinter
Nights beta (which also uses SDL). It is even worse with games like
LBreakout2 and Frozen Bubble. My refresh rate drops to 60Hz. It’s enough to
give me a seizure.

I even tried using my XF86Config-4 file from Mandrake 9.0 because I know
that worked. No luck. I narrowed it down to SDL, because Quake III Arena
and Return to Castle Wolfenstein can change resolutions without a problem.
By way of comparison, here is what was in my XFree86 log when Quake III
tried to change the resolution to 800x600:

----- snip -----
SwitchToMode - scrn: 0 clock: 56300
hdsp: 800 hbeg: 832 hend: 896 httl: 1048
vdsp: 600 vbeg: 601 vend: 604 vttl: 631 flags: 5
Checking against clock: 94500 (94500)
hdsp: 1024 hbeg: 1072 hend: 1168 httl: 1376
vdsp: 768 vbeg: 769 vend: 772 vttl: 808 flags: 5
Checking against clock: 56300 (56300)
hdsp: 800 hbeg: 832 hend: 896 httl: 1048
vdsp: 600 vbeg: 601 vend: 604 vttl: 631 flags: 5
(II) NVIDIA(0): Setting mode "800x600"
SwitchToMode - Succeeded
----- snip -----

Here’s what was in my XFree86 log when UT2K3 tried the same thing:

----- snip -----
SwitchToMode - scrn: 0 clock: 50000
hdsp: 800 hbeg: 856 hend: 976 httl: 1040
vdsp: 600 vbeg: 637 vend: 643 vttl: 666 flags: 5
Checking against clock: 94500 (94500)
hdsp: 1024 hbeg: 1072 hend: 1168 httl: 1376
vdsp: 768 vbeg: 769 vend: 772 vttl: 808 flags: 5
Checking against clock: 56300 (56300)
hdsp: 800 hbeg: 832 hend: 896 httl: 1048
vdsp: 600 vbeg: 601 vend: 604 vttl: 631 flags: 5
Checking against clock: 36000 (36000)
hdsp: 640 hbeg: 696 hend: 752 httl: 832
vdsp: 480 vbeg: 481 vend: 484 vttl: 509 flags: 10
Checking against clock: 78800 (78800)
hdsp: 1024 hbeg: 1040 hend: 1136 httl: 1312
vdsp: 768 vbeg: 769 vend: 772 vttl: 800 flags: 5
Checking against clock: 75000 (75000)
hdsp: 1024 hbeg: 1048 hend: 1184 httl: 1328
vdsp: 768 vbeg: 771 vend: 777 vttl: 806 flags: 10
Checking against clock: 65000 (65000)
hdsp: 1024 hbeg: 1048 hend: 1184 httl: 1344
vdsp: 768 vbeg: 771 vend: 777 vttl: 806 flags: 10
Checking against clock: 102400 (102400)
hdsp: 896 hbeg: 960 hend: 1060 httl: 1224
vdsp: 672 vbeg: 672 vend: 674 vttl: 697 flags: 38
Checking against clock: 57284 (57284)
hdsp: 832 hbeg: 864 hend: 928 httl: 1152
vdsp: 624 vbeg: 625 vend: 628 vttl: 667 flags: 10
Checking against clock: 65000 (65000)
hdsp: 1024 hbeg: 1032 hend: 1176 httl: 1344
vdsp: 480 vbeg: 488 vend: 494 vttl: 563 flags: 10
Checking against clock: 49500 (49500)
hdsp: 800 hbeg: 816 hend: 896 httl: 1056
vdsp: 600 vbeg: 601 vend: 604 vttl: 625 flags: 5
Checking against clock: 50000 (50000)
hdsp: 800 hbeg: 856 hend: 976 httl: 1040
vdsp: 600 vbeg: 637 vend: 643 vttl: 666 flags: 5
(II) NVIDIA(0): Setting mode "800x600"
SwitchToMode - Succeeded
----- snip -----

I managed to find a temporary workaround. If I use ctrl/alt/- to shrink my
desktop to 800x600 before running UT2K3, the game runs fine with no refresh
rate problems.

I noticed at the end of February there was a brief thread describing the
same problem but there didn’t seem to be any follow-up. Thoughts?

My system:
Mandrake 9.1 final
Athlon XP 1800+
512M PC2100
GeForce3 Ti200 (NVIDIA 4191 drivers)
SB Audigy (OSS drivers)
XFree86 4.3-5, libSDL 1.2.5-5, KDE 3.1-83

Matt