Currently vectors can only be declared to be a power of 2 in length, eg. float2, float4, char8, int16.
With that said, it is seems to be possible (i.e. I can't find anything in the spec to disallow it, and it seems to work) to work on vectors that aren't a power of 2 in length.
Here, colour.xyz is a vector of length 3. This is useful, but because there is no type to define this, it's impossible to construct values, and I'm finding myself writing code like this:Code :float4 color; colour.xyz = colour.w * colour.xyz;
i.e. constructing a four element vector, just to select three elements out of it.Code :colour.xyz *= ((float4)(0.5, 1.0, 2.0, 0.0)).xyz;
As these types appear to exist in the language, they should be named, and be able to be constructed. At the moment I'm only finding myself wanting 3-element vectors (for pixels and geometry), but it should probably be generalised. I notice that the spec defines the names as already reserved, so I expect this has already been raised, but I wanted to add my vote for it.