Looking for some testers

BlitzMax Forums/BlitzMax Programming/Looking for some testers

DStastny(Posted 2008) [#1]
After seeing some performance numbers with MGEs test, I was unhappy with some cards not performing as I would expect.

So...

I completly rewrote the Dx9 Drivers render pipeline. Previously it was a buffered implementation which works real well if you batch your drawing commands and texture state changes. However it was blowing chunks on lots of state changes in example like MGE's sprite routines.
Bascially a render state as well as texture state per sprite drawn.

Max2dDx90.6.zip

Thanks to Gabriel for hosting.




DStastny


plash(Posted 2008) [#2]
I am in processes of finding a new host so if someone wanted to host the zip.
Just a zip? Try www.filefront.com


Gabriel(Posted 2008) [#3]
I can host it. My email is in my profile, and you can send it as an attachment so long as it's no more than a few megs.


DStastny(Posted 2008) [#4]
Thanks Gabriel you have mail.

Doug


Gabriel(Posted 2008) [#5]
Ok, uploaded it here.

www.glimmergames.com/downloads/Max2dDx90.6.zip


DStastny(Posted 2008) [#6]
Thanks Gabriel.

For some reference numbers on my Vista Laptop with crappy Nvidia 7100

I see running Test(you can comment out various lines to select drivers)

Driver:Win/Full
Dx7:54/60
OGL:77/80
Dx9:100/102

Doug


slenkar(Posted 2008) [#7]
RESPECT!!

I got
OGL: 4FPS
DX7: 20FPS
DX9: 30FPS
fullscreen


MGE(Posted 2008) [#8]
DStastny - Ofcourse. Anything else I can do to help, by all means please ask. :)


dmaz(Posted 2008) [#9]
wow, this is the first time I've had any test beat the opengl version...(fullscreen anyway), I had to run these test about 4 times each just to make sure. it is kind of weird though because the test's fps doesn't seem to be very consistent for me between multiple runs using any of the drivers. I think this test chokes the advantage that opengl normally has in fps.

driver:win/full
dx9: 428/1115
dx7: 471/481
ogl: 497/563


MGE(Posted 2008) [#10]
What we need to do is start devloping a list of cpu/gpu combinations that this runs on "ok".

DX9 Results Only:

CPU:Intel Celeron 2.93ghz
GPU: Intel 82845G
Windowed: 34fps
Fullscreen: 44fps
Results: Ok

CPU: Intel 2300 1.66 Ghz
GPU: Intel Mobile 945GM
Windowed: 75fps
Fullscreen: 76fps
Results: Ok

CPU: Intel Core 2, Duo CPU T7520 @ 2 ghz
GPU: Nvidia Geforce 8400M GT
Windowed: 110fps
Fullscreen: 254fps
Results: Ok

Seriously. If it runs ok on the above 3 systems, there's a very good chance it's going to run ok on a wide variety of systems. But please, everyone needs to enter their CPU and GPU.

DStastny - Excellent work!! So far so good. :)

Too bad the thread is titled "Please Test This DX9 Max2D Driver". :)

Note: I did notice the timing differences between changing drivers. I also had to reboot one time to "reinit" directx because it started running very slow in all drivers.


MGE(Posted 2008) [#11]
For kicks, what's the steps needed to turn this into a mod, so you can select it just like the other drivers? Thanks.


DStastny(Posted 2008) [#12]
@MGE yeah the title sucks cant change that :)

As for turning it into a Mod, I had tried long ago but there where issues with the version of D3D9.bmx in Pub.

The version I use is more complete as I needed a few more interfaces defined to do some stuff. I sent it to BRL years ago but ... well you know.

As for the testing thanks for the feedback. Not sure of issues regarding slowing drivers. As I developed against the Direct3d Debug drivers and it cleans up correctly. Cant say the Dx7 driver does or not, there use to be all sorts of issues with it not correctly tearing down. Vista doesnt care but XP might start acting flaky mixing Dx7/Dx9 etc.

Doug


degac(Posted 2008) [#13]
test.exe, full screen, debug_off, BlitzMax SVN rev.131, FASM 1.67.26
Nvidia GeForce 6600GT/128Mb - Driver 175.19
CPU: Athlon64 3500+ / 1GB RAM
OS:WinXP SP2

OGL: 282/284
DX7: 191/194
DX9: 186/189


Perturbatio(Posted 2008) [#14]
OGL: 336~347
DX7: 153~167
DX9: 153~154


BladeRunner(Posted 2008) [#15]
test.exe, FS, debug off, rev.131

ATI mobility Radeon X1600 /modded desktop-cataclyst (Thanx Toshiba for the GREAT support :( )
Driver Packaging Version 8.522-080731a-067975C-ATI
Catalyst® Version 08.8
Provider ATI Technologies Inc.
2D Driver Version 6.14.10.6844
Direct3D Version 6.14.10.0603
OpenGL Version 6.14.10.7873

CPU: Intel T2300 @ 2*1.66Ghz, 2.5GB RAM

WIN XP home SP3

OGL: 155-157 FPS
DX7: 131-133 FPS
DX9: 83-85 FPS


GfK(Posted 2008) [#16]
DX7:12
DX9:12
OGL:15

Pentium Dual Core @ 2x1.4GHz, Intel GMA965 X3100 graphics, 2GB RAM, Vista SP1.


MGE(Posted 2008) [#17]
Bug Found: DrawRect not drawing accurate alpha levels.

Verified on 2 different GPU's.

You can change a var at the top to change the driver in order to test the code.




MGE(Posted 2008) [#18]
DrawLine, DrawRect are both not rendering the alpha correctly. Could have something to do with _Drawcolor ?

DrawOval(), DrawPoly() appear to be working correctly as far as alpha level goes.


MGE(Posted 2008) [#19]
After extensive testing (hours and hours) the only other problem I've found is on my 82845G Intel there is tearing once in a while even with vsync active. Tearing is when the render is drawing upon itself.

I don't use any of the collision routines so I can't test those, but so far the driver seems stable and I was able to add dx9 support to my engine, and the game that I've been working on works fine in DX9. :)


DStastny(Posted 2008) [#20]
@MGE I will look into the draw Alpha, I will try and set up a test.

As for the tearing... hmmm The issue here might be trickier as it someone has to do with how DX9 controls VSYNC. Previously in DirctX it use to be a param when you flipped the buffers. Now its a param when you set up the device, so to allow for Flip true Flip false I had to implement a method to get monitor the vsync and invoke the flip when in vblank.

Not sure what I can do here, previously I had torn down the device and recreated it upon changing which I wasnt thrilled with.

Still some questionable speeds, If someone who was not seeing performance significantly faster on DX9 could try and I know this is painful. Reboot between each test it would be apprecicated.

Thanks for feedback
Doug


MGE(Posted 2008) [#21]
Hi Doug, yah I researched the vsync stuff and saw the same thing. What you could do is perhaps setup one more additional parameter on the Graphics() call, something like VsyncOn=1 or 0. And then add:

For vsync always on:
_PresentParams.PresentationInterval=D3DPRESENT_INTERVAL_ONE 

For vsync always off:
_PresentParams.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE

And then in the Flip command, you just call the swap chain without the additional timing handling you're doing. ;)

Awesome stuff Doug, thanks so much for your time on this! :)


DStastny(Posted 2008) [#22]
MGE I appreicate the resurgent interest in my driver.

Here is fix for the Alpha
	Method SetAlpha( alpha:Float )
		_Drawcolor=(Int(255*Max(Min(alpha,1),0)) Shl 24)|(_Drawcolor&$ffffff)
		' reset our values in our Vertices
		_VerticesColor[VERTD]=_DrawColor
		_VerticesColor[VERTD+6]=_DrawColor
		_VerticesColor[VERTD+12]=_DrawColor
		_VerticesColor[VERTD+18]=_DrawColor		
	End Method


Didnt work because I forgot to set it. If you set the Alpha then the Color it worked just not otherway around :)

Doug


DStastny(Posted 2008) [#23]
@MGE does that clean up the issue you see with tearing?

Thanks for helping
Doug


MGE(Posted 2008) [#24]
Hi Doug - Alpha problem fixed! Thanks for the quick fix. ;)

The tearing problem is very strange to be honest. It's only happening visibly on my Intel 82845G board. Even with the Interval_One it's still the same way. So perhaps it's just something with that (older) driver.

I think for the DX9 driver it might be better to take out the timing in the flip command and just have an option somewhere for interval_one or interval_immediate when the device is made.

Perhaps a global var we can set? DX9VsyncOn = 1 or 0?

Except for test purposes, no serious developer is going to release a game with vsync off anyway. ;)

Again, you've made my day! Blitzmax now has room to grow well into the next few years. You should get a check from the head honchos. :)


MGE(Posted 2008) [#25]
Update: Window mode is a no go for interval_one it seems, animation was very choppy. Interval_One for full screen works wonderfully.


MGE(Posted 2008) [#26]
I edited the driver for DX9 specifics that work fine on 2 of my test machines. I havn't tested the 3rd yet, but it's a brand new machine and never gives me any problems.

We end up losing the dynamic vsync ability like we have in DX7, but that's no big deal to be honest.

I set a global var to set vsync on or off for the DX9 driver.

DX9VsyncOn = 1 or 0

In windowed mode, it only uses interval_immediate and uses your timing code to wait for the vblank in the flip command.

In full screen mode it uses interval_one and the flip doesn't do any timing, it just flips the chain and exits.

The dx9 flip command has a dummy parameter for the flip so any existing code or when switching drivers doesn't have to be changed. ;)

My modifications are available here:

http://jgoware.com/mge/Dx9Max2dDriver.zip

Lots of tests to do still to make sure it's reliable enough for deployment, but it's looking very promising. ;)

Doug, is there anyway to expose the D3DX object in this driver?

Again, thanks Doug for all of your hard work. :)


TeaVirus(Posted 2008) [#27]
Neither link to the DX9 driver appear to be working. Any chance there is a new one available?


MGE(Posted 2008) [#28]
Check the blitzmax tweaks forum. It apparently is going through some final checks, etc, before becoming an official release.


TeaVirus(Posted 2008) [#29]
Ok thanks, I'll wait patiently then.