Native Formats/Alignment vs. AGP Aperture size

Hi Everybody,

Ive got an interesting issue with maintaining hardware compatabilitiy across the board (ATI and nVidia).

First Issue: on nVidia cards vertex arrays of 2 element short’s work fine, but on ATI’s the stalls are immense, so for example a heightmap of 1024*1024 stored using VAR or VBO winds up being 2megs or so, no problem right… but since this doesnt seem to work on ATI’s, we’ve gotta bump it up to floats, bringing our total to 4 megs(pretty easy solution).

Second Issue: With VAR we were unable to allocate even that 4mg’s of VAR(needed for the heightmap, increasing the aperture in the BIOS fixed the problem) on some computers(forcing us to use system memory), now that were using VBO does it have some magic way of allocating fast memory in those cases? Or can we just expect people to be able to fix their aperture size if its too small for our game? As well going for alignment in such a huge structure is going to put a pretty big burden on such a valueable resource.

Maybe even 2mb of fast memory is too much to ask for, and our landscape vertex arrays should just be built on the fly(based off rendered triangles) to minimize memory?

Any help would be appreciated with this issue?

If AGP allocation doesn’t work, then the user has old or missing chipset drivers (NOT graphics drivers – north bridge drivers!). If VAR can’t allocate AGP, then VBO also can’t allocate AGP. You might want to detect this and warn the user. Perhaps look through the PCI device registry for devices from Intel, VIA, SiS or similar and send them off to the vendor driver download page for their north bridge, even. (We do this – lots of “fun” researching that!)

Hardware compatibility is a pain. Just accept it, and live with it. Design for the subset that actually works.

Well its not that we cant allocate VAR, its that we cant allocate as much of it as we need/like. Increasing the aperture size has helped in all cases. Back when we were using VAR we spit out a warning to the user, but now that we are on VBO theres no way to query what kind of memory the driver choose for your buffer. It just seems odd to me that many games run quickly on these computers, but for us the AGP aperture size needs to be increased… is 4-8mb really that much to ask for? Anyways thanks for the help Jwatte hardware compatibility is a pain sometimes. That PCI device registry thing seems pretty excesive… if no AGP memory could be allocated wouldnt all graphic apps on that persons computer run slowly?

I have never seen a bios, in which i can select less than 32 Megs for the apparture size. Maybe i can disable it, though.

So, did i not look closely enough, or are those damned old computers, you are using there??

Anyway, i don´t know, if you can allow yourself to be that arrogant, but i would simply tell the user: “Keep your system up to date or don´t complain.”

Jan.

but since this doesnt seem to work on ATI’s, we’ve gotta bump it up to floats, bringing our total to 4 megs(pretty easy solution).
It is almost certainly not the fact that you’re using shorts. It’s your alignment. ATi cards are really sensitive to alignment. They like it when each element is aligned to 4 bytes or so. As such, if you have 3-vector shorts in an array, it will find every other short on bad alignment. Instead, use 4-vectors of shorts. More memory, yes, but not nearly as much as floats.

if no AGP memory could be allocated wouldnt all graphic apps on that persons computer run slowly
Yes? And your point being?
:slight_smile:

It’s amazing how unaware some users are of what their systems really are doing. Not to mention how unaware the companies that build their systems are – Micron used to ship VIA based machines with missing AGP drivers! Even worse: for many of our users, our application is the first 3D application they’ve ever tried.

Regarding AGP aperture size: A lot of earlier BIOSes had settings as low as 2 MB, and some couldn’t go higher than 32 MB, and then 64 MB. Back then, some BIOS vendors or system vendors thought that making a big AGP aperture size somehow gave them less memory in the system, sort-of like a shared framebuffer. Remember: AGP was introduced back with the LX chip set for the Pentium II.

if no AGP memory could be allocated wouldnt all graphic apps on that persons computer run slowly?
Not necessarily. Using VAR you can also allocate your vertex buffers directly into video memory. That’s what i’m doing for pure PCI graphics cards… note that some people have AGP-able GPUs but don’t have their chipset drivers upgraded, so they can’t use it and fall back to PCI…

Y.