Some time ago i tried glSlang on my Radeon 9700 and back then it was not very usable.
Well, yesterday i tried again, hoping that it has improved since then.
Well, my first impression is, that it has in fact improved quite a bit, however, there are still some annoying things.
At the moment i am doing skinning on the GPU. Well, the easiest method is to use a for-loop. However, the hardware seems not to support this, my vertex-shader falls back to software rendering. Well, i can live with that, that’s a hw limitation and i COULD work around that (static loops will be unrolled, no?)
Anyway, another problem with skinning is the amount of data for the bones. A 4x4 matrix takes 16 uniforms, and my card seems to support 1024 uniforms which makes 64 bones (61 in reality).
Now, i THOUGHT i could reduce this, by sending the rotation as 3x3 and translation as vec3, reducing one bone to 12 uniforms, which should allow me to use around 80 bones.
However, after decompositing and doing the extra maths in the shader i increased the bone-count in the shader and surprise! i did not get more than 60 bones. In fact, with 4x4 matrices i could get 61, with 3x3 + vec3 i get 60 bones.
Now THAT’s not a hw limitation anymore, i think. It SHOULD support more bones.
This sounds, as if every data-element needed to be “aligned” at some even address (multiple of 16 for ALL matrices, multiple of 4 for ALL vectors???).
If that’s true ATI is limiting the potential of their cards quite heavily.
Can anyone confirm this? Is this the same on Geforce 6+ ?