[Mesa-dev] [PATCH] Ensure that acos(1)==0.
Ian Romanick
idr at freedesktop.org
Tue May 8 08:40:03 PDT 2012
On 05/08/2012 02:51 AM, Olivier Galibert wrote:
> The apparent cost of the calibration is eaten by the constant
> propagation optimization pass.
Is the underlying problem that the constant in the acos implementation
just didn't have enough precision? Would adding more digits to the
literal constant help?
There is still a danger here. You (we) are assuming that asin on the
CPU and asin on the GPU produce the exact same result. This may or may
not be the case.
> Signed-off-by: Olivier Galibert<galibert at pobox.com>
>
> diff --git a/src/glsl/builtins/ir/acos.ir b/src/glsl/builtins/ir/acos.ir
> index f0078f8..d321057 100644
> --- a/src/glsl/builtins/ir/acos.ir
> +++ b/src/glsl/builtins/ir/acos.ir
> @@ -3,27 +3,35 @@
> (parameters
> (declare (in) float x))
> ((declare () float s)
> + (declare () float t)
> (call asin (var_ref s) ((var_ref x)))
> - (return (expression float - (constant float (1.5707963)) (var_ref s)))))
> + (call asin (var_ref t) ((constant float (1))))
> + (return (expression float - (var_ref t) (var_ref s)))))
>
> (signature vec2
> (parameters
> (declare (in) vec2 x))
> ((declare () vec2 s)
> + (declare () float t)
> (call asin (var_ref s) ((var_ref x)))
> - (return (expression vec2 - (constant float (1.5707963)) (var_ref s)))))
> + (call asin (var_ref t) ((constant float (1))))
> + (return (expression vec2 - (var_ref t) (var_ref s)))))
>
> (signature vec3
> (parameters
> (declare (in) vec3 x))
> ((declare () vec3 s)
> + (declare () float t)
> (call asin (var_ref s) ((var_ref x)))
> - (return (expression vec3 - (constant float (1.5707963)) (var_ref s)))))
> + (call asin (var_ref t) ((constant float (1))))
> + (return (expression vec3 - (var_ref t) (var_ref s)))))
>
> (signature vec4
> (parameters
> (declare (in) vec4 x))
> ((declare () vec4 s)
> + (declare () float t)
> (call asin (var_ref s) ((var_ref x)))
> - (return (expression vec4 - (constant float (1.5707963)) (var_ref s)))))
> + (call asin (var_ref t) ((constant float (1))))
> + (return (expression vec4 - (var_ref t) (var_ref s)))))
> ))
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list