seeding the pot for 2.0 features [small vectors]

Chad J gamerChad at _spamIsBad_gmail.com
Sun Jan 28 19:23:11 PST 2007


Bill Baxter wrote:
> Mikola Lysenko wrote:
> 
>> Bill Baxter wrote:
>>
>>> Mikola Lysenko wrote:
>>>
>>>> 2. Low dimensional vectors as primitive types
> 
> 
> "Vectors are more common than complex, and complex is built-in".
> 
> This is a good argument.  Although, there seem to be a number of things 
> out there that are more common, or least as-common as 'complex'.  For 
> instance, there's a contingent here that wants to see decimal arithmetic 
> supported in the core.  There was a strong push for regexp to be in the 
> core for a while.
> 
> 
> "Most CPUs today have *some* kind of SSE/Altivec type thing"
> 
> That may be, but I've heard that at least SSE is really not that suited 
> to many calculations -- especially ones in graphics.  Something like you 
> have to pack your data so that all the x components are together, and 
> all y components together, and all z components together.  Rather than 
> the way everyone normally stores these things as xyz, xyz.  Maybe 
> Altivec, SSE2 and SSE3 fix that though.  At any rate I think maybe 
> Intel's finally getting tired of being laughed at for their graphics 
> performance so things are probably changing.
> 
> 
> "Library vs Core"
> 
> I think there's really not much that you can ask from the core.  A small 
> vector of 4 numbers can represent any number of things.  So I think your 
> best hope for the core is to support some very basic operations on small 
> vectors -- like component-wise +,-,*,/, and dot product -- to optimize 
> those kind of expressions as best as possible, and leave everything else 
> to libraries.  I guess that's pretty much how it works with HW shader 
> languages.  Except they add swizzles to the set of primitive ops.
> 
> 
> So what you're left with would be satisfied in large part by just having 
> vector math work on small static arrays (and be optimized well).
> 
>      float[4] v = a*b + c*d;
> 
> you can even make aliases if you like.
> 
>      alias float[4] float4;
> 
> But your 3D graphics library will still need to be a library on top of 
> that.

Yeah I mentioned static arrays earlier, but I realized that they can be 
a bit of a pain in the ass to work with.  This probably means that 
static arrays should be fixed, then they could be useful vectors. 
Consider trying to return a float4 from a function.  You can't return a 
float[4].  I remember talk on this ng about how static arrays were this 
kinda sucky inbetween-value-and-reference-type sort of thing.  I'd hope 
that at least gets fixed before static arrays are used for lo-D vectors.

> 
> Good news is that I think vector math like the above is something that 
> Walter is interested in adding to the language at some point.  Bad news 
> is that noone knows when that will be.   I'd guess though that a 
> kick-ass vector expression optimizer would be a long way off, judging by 
> how hard it's been for C++ compilers to get SSE type optimizations 
> implemented.
> 
> 
> "Getting it in the standard library"
> 
> I agree, though, that lo-D math is common enough that it should be 
> included in a standard library.  I wonder if the Tango developers would 
> be willing to include a vector math class...or if they already have one 
> in there.
> 
> I'd certainly like to be a contributor to that if so.
> 
> --bb



More information about the Digitalmars-d mailing list