I’m using emulated double functions that approximate double precision using two single precision floats. This gives a sizeable performance increase over native doubles, and allows compatibility with older GPU’s.
Normally, the compiler’s aggressive math optimizations break the code, causing the precision to be no better than native single. With an older GPU and driver that I had (I forget which), using the compiler directives #pragma optionNV(fastmath off) and #pragma optionNV(fastprecision off) solved the problem. However, on my GTX 880, driver version 347.52, the directives have no effect at all. The compiler still silently accepts them, so I assume this is a bug, rather than removed feature.
I’m using the functions found here: https://www.thasler.com/blog/blog/glsl-part2-emu
(I’ve also tried a couple others I found on the web, they suffer from the same issue)
If I use the precise qualifier, I can force the proper behavior, however, the precise qualifier requires version 400 or extension ARB_gpu_shader5, which I believe aren’t supported on cards earlier than the GTX 400 series. Is there any way to ensure the correct behavior across all Nvidia GPU’s?
Thanks for any help you can provide.