Jump to content
  • Advertisement
Sign in to follow this  
hdxpete

HLSL distance vs dot

This topic is 2098 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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?

Share this post


Link to post
Share on other sites
Advertisement
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

Share this post


Link to post
Share on other sites
i figured dot might be hardware accelerated, but what your saying is making me ask.... distance doesn't do a square root?

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!