Are there performance advantages to sticking to power-of-two textures on modern integrated and discrete GPUs?
Most of modern GPUs support non-power of two (NPOT) textures and handle them well. Performance drop is quite little. But there are few problems to consider:
When using NPOT texture it takes more space in RAM, just like next-sized POT texture. Technically you just waste the space that could be used to put something in there;
NPOT textures may be handled noticeably slower (in OpenGL 2.1 I had up to 30% performance drop) compared to POT of next size;
Older GPUs and on-board/on-chip GPUs are not so advanced, they often support NPOT textures, but support is quite slow and clumsy;
Even older GPUs may refuse to accept/display NPOT textures at all;
There could be edging artifacts caused by mip-map interpolation, your 25x25 texture might have a black fringe where pixels were added to stuff it to 32x32 size.
P.S. I don't know for sure about mobile devices, there might be even more restrictions regarding POT textures.
What advantages do non-power-of-two textures have, if any?
As far as I know there are only 2 advantages:
- They take less space on HDD if they are not packed (when packed empty areas give very little add)
- You can save time on writing NPOT -> POT converter. You will need one for release version, but using NPOT textures for designing and prototyping interface / models is just fine
Are there large populations of desktop users who don't have cards that support non-power-of-two textures?
As far as I know and tested on PC - Yes. That includes major percentage of speed-drop / minor bugs GPUs and minor percentage of cards that won't handle NPOT at all.