gpu.js icon indicating copy to clipboard operation
gpu.js copied to clipboard

atan2 is implemented as atan(y/x) in gpu backend

Open danbgoldman opened this issue 3 years ago • 3 comments

slow down egghead

What is wrong?

atan2 should return values from -pi to pi, but instead returns values from -pi/2 to pi/2 in gpu mode. It also returns undefined results for x=0.

Where does it happen?

In Chrome browser.

How do we replicate the issue?

I'm attaching a repro case - correct behavior can be seen in mode:cpu, incorrect behavior in mode:gpu.

atan2-bug.zip

How important is this (1-5)?

3 - I can work around, but also should be an easy fix.

Expected behavior (i.e. solution)

The backend GLSL implementations of atan2 use the single-argument version of atan(y_over_x), instead of the two-argument version atan(y, x).

danbgoldman avatar Nov 20 '20 07:11 danbgoldman

https://tc39.es/ecma262/#sec-math.atan2

The spec for atan2 is pretty sophisticated and long... Does GLSL have an atan2 already?

harshkhandeparkar avatar Nov 21 '20 20:11 harshkhandeparkar

IIUC, GLSL atan is overloaded to take both 1 argument (like Math.atan) and 2 arguments (like Math.atan2). AFAIK the second implementation is identical to C/javascript.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/atan.xhtml

danbgoldman avatar Nov 21 '20 20:11 danbgoldman

Can confirm that pull request fixes supplied repro case.

Screenshot 2021-03-23 at 13 41 18

ted-piotrowski avatar Mar 23 '21 20:03 ted-piotrowski