[sldev] Optimization target: Avatar skinning, LLViewerJointMesh, matrix multiply

Dzonatas dzonatas at dzonux.net
Sat Apr 14 17:48:52 PDT 2007


The Altivec and SSE2 instruction sets share similar features, and that
includes the ability to interleave data in the vector registers. C/C++
compilers still aren't smart enough to unroll and interleave vector data
in general. However, the it appears that the code shown could use a
boost from interleaved vector sets. The main reason to do this is for
the matrix ops, where you can multiply vector by vector, interleave
columns to rows, then multiply or add vector by vector. I'll study this
a bit more to see how much of that method works here.

James Cook wrote:
> Recently I was playing with Shark, the Mac profiling tool.  I noticed
> that Second Life has a hot spot in several related functions:
> LLViewerJointMesh::updateGeometry(), operator*(LLVector3, LLMatrix4) and
> operator*(LLVector3, LLMatrix3).
>
> On the Mac we default avatar vertex programs off (I think for
> compatibility with some graphics card/driver combinations).  This means
> that "skinning" of the avatar mesh has to be done on the CPU instead of
> the GPU.  I think skinning refers to blending the vertices of the mesh
> around the joints so you don't see gaps.  I'm not a graphics guy.
>
>   
[...]
-- 



More information about the SLDev mailing list