Hi there, I was wondering if anyone has heard of problems with cpu chipset that could cause runetime errors. I have compiled a simple vertex array program that runs perfect on a generic Intel based system, on my home amd 1800xp it crashes. my system is win 98 geforce2/400/32mb. i have tried diferent video drivers and have all system updates. the “illegal operation” occurs on calling glDrawElements() when i traced it. the error is in nvopengl.dll. I have even tried using glDrawArrays() and that will work fine but not what i need. I am almost about to try another card but would like to see if i have any options. I have also tried all settings in advanced display settings in windows. Any sugestions would be greatly appreciated. thanks
The crash only occuring on glDrawElements seems to hint to invalid indices somewhere being specified in the index array, i.e. indices that point to vertex data outside of the memory block that you allocated. Maybe your index array contains some garbage in the range you specified?
The code does work on other systems. It just a heightfied map of vetex all strung together. Each call im just pulling 2 strips of verex (current strip+following strip) out at a time for xcor and doing a triangle strip what bugs me is that it works on an old onboard piece of crap video card with 8mb but not my geforce2.
Sorry to say this but it is almost certainly a bug in your code rather than the drivers.
If for instance you are running through a debugger, all memory values will be initialised, therefore by coincidence, making you program work.
All it requires is for the invalid memory you are accessing on one machine to have different values to that of another machine
Originally posted by Caltus:
The code does work on other systems.
There’s a know Athlon bug with AGP handling, where a speculatively fetched clean cache line is written back into AGP memory. AGP memory is not cache-coherent, so this causes memory to be overwriten with stale data.
IIRC, there’s a service pack for Windoze, which fixes this problem.
For Linux (the kernel) you can pass “mem=nopentium” option on the kernel command line.