Since I am very limited on hardware available for testing, I wanted to ask how well current drivers for ATI/NVIDIA support rectangular textures and NPOT textures.
Am I correct that the best supported extensions for this are ARB_texture_rectangle and ARB_texture_non_power_of_two?
Is it correct that ATI and NVIDIA supports ARB_texture_rectangle with hardware that supports SM2.0 or better, and ARB_texture_non_power_of_two is only supported by NVIDIA?
(according to http://delphi3d.net/hardware/allexts.php))
ATI supports NPOT, too, with their more recent cards (my X1600 does support it).
However, NPOT is really slow on ATI, compared with RECT. On nVidia, AFAIK they are both nearly equally fast. I would suggest you to use ARB_texture_rectangle, as long as you don’t need mipmapping and more than linear filtering.
So is it save to asume that everything equal or newer than R300 and NV30 generation supports RECT with newest drivers?
And how does it look with NPOT?
Damn, it is REALLY frustrating that both vendors don’t supply a extension support matrix for their products based on the current driver revision!
It is their damn business not ours.
We fortunately do not (have to) support the Intel crap.
Do not expect that mipmapping is supported on RECT
textures. It is only on POT or NPOT.
Some ATI boards can do NPOT despite it is
not announced through extension string.
They implement it in half way. Some limitation exists, like not all wrap modes are supported.
Originally posted by mfort: Do not expect that mipmapping is supported on RECT textures.
That phrases it a bit optimistic. Actually rectangle textures NEVER support mipmapping, according to the spec.
R300 and up supports RECT.
R300 and up supports NPOT as long as you stay within the same restrictions as in RECT.
R600 supports NPOT unconditionally.
I’d recommend NPOT over RECT for everything, especially for R300/R400 series since they don’t support RECT natively but has to normalize the texture coordinates through shader modification.
On Mac OS X things are a little different; RECT is widely supported because the window server etc uses it, and there is an effort made to support things equally across vendors.
RECT is supported on:
R100 and up (all Mac ATI renderers newer than Rage128)
NV11 and up (all Mac NV renderers)
GMA 950 (all Mac Intel renderers)
NPOT is currently supported on:
R500 and up (but < R600 can fall back to software)
NV40 and up
GMA 950
Usage notes:
NPOT is nice if you want to use normalized coordinates, and works on R500 natively as long as you don’t use mipmaps, repeat/mirror modes, or 3D/cube textures.
On the other hand, for some applications RECT denormalized coordinates are more natural. And on NV30, if you want to use float texture formats you are stuck with RECT anyway.