Why does the geometry disappear / What can cause these problems / Why does the code work on intels card but not on ATIs ?
I haven't looked over your code, but i'll address the question.
basically, each vendor puts out their graphics drivers, these drivers might be strict, or less stricter than other drivers. they might be fine with what the docs describe as "undefined behavior". it comes down to the problem of how much the vendor cares to support and spend time on their openGL implementation, as you'll find directX is generally more reliable across different vendors. IIRC some nvidia drivers don't even mind if you handed your openGL context directX shader code. it's defiantly a problem that your program may run differently on different chipsets(particularly integrated intel being generally crap). however things are getting better, but their's still plenty of older hardware out their that might have a problem with how you are trying to do things.
Also, i'd recommend checking that the ATI card supports the openGL version you are using, it's most probable it does, but just be certain, also make sure you have the latest drivers for the card.