why no more than 4 texture units in standard pipeline

im curious why with the standard pipeline i can access more than 4 texture units on my gffx but with glsl i can use 16, whats the reason behind this?

That’s because the GeForce FX had a separate fixed function pipeline in the chip and nVidia decided to support only 4 texture units. ATI is simulating the FFP with shaders, as far as i know, so all texture units can be used and no extra pipeline had to be implemented in hardware.
Anyone, please correct me, if i’m wrong.

Originally posted by Jens Scheddin:
That’s because the GeForce FX had a separate fixed function pipeline in the chip and nVidia decided to support only 4 texture units. ATI is simulating the FFP with shaders, as far as i know, so all texture units can be used and no extra pipeline had to be implemented in hardware.
Anyone, please correct me, if i’m wrong.

I don’t think GeForce FX had a full fixed function T&L anymore, but I don’t have definitive data on that.

I think that the reason is more likely to be the a mixture of the number of interpolants needed for the texture coordinates and the extra state tracking for supporting more texture stages, coupled with the fact that no application in the horizon is planning to use more than 6 simultaneous textures in the fixed function pipeline.

The GeForce FX has 8 vec4 interpolants for texture coordinates. That limits it to 8 3D perspective corrected textures. They could export 16 texture stages if all of them were 2D non-projected, but OpenGL doesn’t allow to be non-orthogonal in the number of textures you export.

Adding new interpolants is expensive in hardware terms and if those transistors are going to sit idle most of the time because nobody really uses more than 6, then there’s no point in adding them.

I don’t see any reason why they couldn’t have exported 8 texture stages, but I guess the extra OpenGL state and code bloat didn’t pay.