• Create Account

Banner advertising on our site currently available from just \$5!

HLSL distance vs dot

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

4 replies to this topic

#1hdxpete  Members   -  Reputation: 512

Like
0Likes
Like

Posted 21 November 2012 - 07:00 PM

Doing point lights in one of my shaders recently. Someone with more experience then i suggested i use distance as opposed to dot for the attenuation calculations

so i wrote
attenFactors.z = dot(lightPos, lightPos);
attenFactors.y = sqrt(attenFactors.z);

this person suggested i rewrite it to
attenFactors.y = distance(lightPos);
attenFactors.z = attenFactors.y * attenFactors.y;

to me they are equivalent operations so i thought that mine would be slightly faster since im removing a multiplication. however we are talking 1 operation right?. so does it really matter?

#2MJP  Moderators   -  Reputation: 13353

Like
0Likes
Like

Posted 21 November 2012 - 07:18 PM

Functionally those are exactly the same. Dotting a vector with itself is equal summing the squares of its components, which is exactly what distance() will do. I would guess that once the code is optimized you'd also end up running the exact same instructions, at least on a modern GPU that uses scalar operations per-thread. Code like that usually comes from people writing for older GPU's where it might actually issue a dedicated dot product instruction.

Edited by MJP, 21 November 2012 - 07:22 PM.

#3hdxpete  Members   -  Reputation: 512

Like
0Likes
Like

Posted 21 November 2012 - 11:17 PM

i figured dot might be hardware accelerated, but what your saying is making me ask.... distance doesn't do a square root?

#4MJP  Moderators   -  Reputation: 13353

Like
1Likes
Like

Posted 22 November 2012 - 12:31 AM

The hardware may or may not have a native dot product instruction, it would depend on the GPU. The internal ISA actually changes pretty frequently among different chipset versions, and like I mentioned before the latest architectures from both Nvidia and AMD both only use scalar instructions.

distance() does compute the square root of the sum, I just left that part out for brevity.

#5hdxpete  Members   -  Reputation: 512

Like
0Likes
Like

Posted 22 November 2012 - 12:46 AM

ok. thanks for the info. very helpful

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

PARTNERS