delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1993/09/06/03:45:58

Date: Mon, 6 Sep 93 16:14:50 CST
From: michaels AT vsl DOT com DOT AU (Michael Snoswell)
To: djgpp AT sun DOT soe DOT clarkson DOT edu
Subject: Fastest VLB graphics card for writing pixels

I'm writing a networked VR app that needs fast graphics. I've just changed the
rendering engine to use zbuffer scanline stuff instead of flat polys using
the LIBGRX polyfill routine. I'm just using flat colour for the moment but
it still runs about 5 times slower than the LIBGRX polygon scanline routine.
(For those interested, I'm using the Graphics Gems poly_scan.c code)

I have a 486/33 VLB but with an ISA ET4000 card. At 800x600x256 I used to get
about 7-8 fps, now with zbuffer stuff I get 1-2fps :-(

I have been told by numerous sources who know better than I that the 
poly_scan.c code is about as optimised at you can get. Given that it's not 
doing a whole lot more than a 2d polygon scanline routine (remember, I'm using
flat colour, no Gouraud shading, yet!) the difference must be in the zbuffer
check and the putpixel call (the LIBGRX version). (Well, the poly scan in 
LIBGRX uses a stos to fill a line at a time. how much slower would a pixel by
pixel fill be on a machine cycle ratio? I have no idea about assem stuff)

STOP PRESS! Eat my words. The SetPixel function is a dog, I just traced it
through LIBGRX, gads, there's a huge overhead...

Well my original question was going to be about VGA cards. As I have some VLB
slots I'm not using here. I know accelerated cards with things like S3 chips 
don't implicitly speed up writing individual pixels and the video test results
that have been floating around give one pause to think. I know that if you
have VRAM you can write indivual pixels faster (and more so using VLB). I have 
the list of VGA card timings but the compiled version DJ posted omitted the
wait state data (saving bandwidth I guess :-) 

Anyway, follow my reasoning and see if you can help me.

According to that list a 486/33 with ET4000 ISA gave 2,285 at 8 bits (s-v 
column, 6th row) whcih is what I have now.

I assume that's 1000 transfers per second units (I didn't keep the original
posting so I'm not sure here). At 33 MHz that gives 33/2.285 = 14.4 wait states
right? Now there weren't any 486/33 VLB machines there, but of the DX266 ones,
the ET4000LB looks best (Dell has a slightly different bus or something that I
haven't got?). But considering I'm using LIBGRX it's be nice to access those
hardware polygons and line drawing routines for other things as there is a
Stealth S3 driver (but not well supported according to some comments in the
LIBGRX source, libgrx.h, line 368). Now I assume here that the LIBGRX driver 
for the Stealth uses the hardware polygons and line routines, am I right? Then
I should get a Stealth VLB card.

What sort of 8-bit s->v could I expect on my machine using a this? And back
to the original reason: How will this new setup (using *my own* putpixel to
avoid LIBGRX's SetPixel overhead) compare to the polygon scan
routine in LIBGRX (that uses stos to fill scan lines)?

Local cost of these is about $438 ($AUS1 = $US0.65). Still, I'd like to make 
an educated selection. Any suggestions or corrections to my reasoning would 
be appreciated.

cheers
	Michael Snoswell

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019