mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 20:58:04 +02:00
glsl: Add isinf() and isnan() builtins.
The implementations are as follows: isinf(x) = (abs(x) == +infinity) isnan(x) = (x != x) Note: the latter formula is not necessarily obvious. It works because NaN is the only floating point number that does not equal itself. Fixes piglit tests "isinf-and-isnan fs_basic" and "isinf-and-isnan vs_basic".
This commit is contained in:
parent
b6f32bbe12
commit
ede60bc467
4 changed files with 34 additions and 4 deletions
17
src/glsl/builtins/ir/isinf.ir
Normal file
17
src/glsl/builtins/ir/isinf.ir
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
((function isinf
|
||||
(signature bool
|
||||
(parameters
|
||||
(declare (in) float x))
|
||||
((return (expression bool == (expression float abs (var_ref x)) (constant float (+INF))))))
|
||||
(signature bvec2
|
||||
(parameters
|
||||
(declare (in) vec2 x))
|
||||
((return (expression bvec2 == (expression vec2 abs (var_ref x)) (constant vec2 (+INF +INF))))))
|
||||
(signature bvec3
|
||||
(parameters
|
||||
(declare (in) vec3 x))
|
||||
((return (expression bvec3 == (expression vec3 abs (var_ref x)) (constant vec3 (+INF +INF +INF))))))
|
||||
(signature bvec4
|
||||
(parameters
|
||||
(declare (in) vec4 x))
|
||||
((return (expression bvec4 == (expression vec4 abs (var_ref x)) (constant vec4 (+INF +INF +INF +INF))))))))
|
||||
17
src/glsl/builtins/ir/isnan.ir
Normal file
17
src/glsl/builtins/ir/isnan.ir
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
((function isnan
|
||||
(signature bool
|
||||
(parameters
|
||||
(declare (in) float x))
|
||||
((return (expression bool != (var_ref x) (var_ref x)))))
|
||||
(signature bvec2
|
||||
(parameters
|
||||
(declare (in) vec2 x))
|
||||
((return (expression bvec2 != (var_ref x) (var_ref x)))))
|
||||
(signature bvec3
|
||||
(parameters
|
||||
(declare (in) vec3 x))
|
||||
((return (expression bvec3 != (var_ref x) (var_ref x)))))
|
||||
(signature bvec4
|
||||
(parameters
|
||||
(declare (in) vec4 x))
|
||||
((return (expression bvec4 != (var_ref x) (var_ref x)))))))
|
||||
|
|
@ -288,7 +288,6 @@ vec2 smoothstep(float edge0, float edge1, vec2 x);
|
|||
vec3 smoothstep(float edge0, float edge1, vec3 x);
|
||||
vec4 smoothstep(float edge0, float edge1, vec4 x);
|
||||
|
||||
#if 0
|
||||
bool isnan(float x);
|
||||
bvec2 isnan(vec2 x);
|
||||
bvec3 isnan(vec3 x);
|
||||
|
|
@ -298,7 +297,6 @@ bool isinf(float x);
|
|||
bvec2 isinf(vec2 x);
|
||||
bvec3 isinf(vec3 x);
|
||||
bvec4 isinf(vec4 x);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 8.4 - Geometric Functions
|
||||
|
|
|
|||
|
|
@ -288,7 +288,6 @@ vec2 smoothstep(float edge0, float edge1, vec2 x);
|
|||
vec3 smoothstep(float edge0, float edge1, vec3 x);
|
||||
vec4 smoothstep(float edge0, float edge1, vec4 x);
|
||||
|
||||
#if 0
|
||||
bool isnan(float x);
|
||||
bvec2 isnan(vec2 x);
|
||||
bvec3 isnan(vec3 x);
|
||||
|
|
@ -298,7 +297,6 @@ bool isinf(float x);
|
|||
bvec2 isinf(vec2 x);
|
||||
bvec3 isinf(vec3 x);
|
||||
bvec4 isinf(vec4 x);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 8.4 - Geometric Functions
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue