The opcodes are bf2u, bf2i, bi2f and bu2f, with "b" meaning bitwise conversions.
Signed-off-by: Olivier Galibert <galib...@pobox.com> --- src/glsl/builtins/ir/floatBitsToInt.ir | 21 +++++++++++++++++++ src/glsl/builtins/ir/floatBitsToUint.ir | 21 +++++++++++++++++++ src/glsl/builtins/ir/intBitsToFloat.ir | 21 +++++++++++++++++++ src/glsl/builtins/ir/uintBitsToFloat.ir | 21 +++++++++++++++++++ .../builtins/profiles/ARB_shader_bit_encoding.glsl | 22 ++++++++++++++++++++ src/glsl/ir.cpp | 4 ++++ src/glsl/ir.h | 4 ++++ 7 files changed, 114 insertions(+) create mode 100644 src/glsl/builtins/ir/floatBitsToInt.ir create mode 100644 src/glsl/builtins/ir/floatBitsToUint.ir create mode 100644 src/glsl/builtins/ir/intBitsToFloat.ir create mode 100644 src/glsl/builtins/ir/uintBitsToFloat.ir create mode 100644 src/glsl/builtins/profiles/ARB_shader_bit_encoding.glsl diff --git a/src/glsl/builtins/ir/floatBitsToInt.ir b/src/glsl/builtins/ir/floatBitsToInt.ir new file mode 100644 index 0000000..3811fac --- /dev/null +++ b/src/glsl/builtins/ir/floatBitsToInt.ir @@ -0,0 +1,21 @@ +((function floatBitsToInt + (signature int + (parameters + (declare (in) float arg)) + ((return (expression int bf2i (var_ref arg))))) + + (signature ivec2 + (parameters + (declare (in) vec2 arg)) + ((return (expression ivec2 bf2i (var_ref arg))))) + + (signature ivec3 + (parameters + (declare (in) vec3 arg)) + ((return (expression ivec3 bf2i (var_ref arg))))) + + (signature ivec4 + (parameters + (declare (in) vec4 arg)) + ((return (expression ivec4 bf2i (var_ref arg))))) +)) diff --git a/src/glsl/builtins/ir/floatBitsToUint.ir b/src/glsl/builtins/ir/floatBitsToUint.ir new file mode 100644 index 0000000..7b33740 --- /dev/null +++ b/src/glsl/builtins/ir/floatBitsToUint.ir @@ -0,0 +1,21 @@ +((function floatBitsToUint + (signature uint + (parameters + (declare (in) float arg)) + ((return (expression uint bf2u (var_ref arg))))) + + (signature uvec2 + (parameters + (declare (in) vec2 arg)) + ((return (expression uvec2 bf2u (var_ref arg))))) + + (signature uvec3 + (parameters + (declare (in) vec3 arg)) + ((return (expression uvec3 bf2u (var_ref arg))))) + + (signature uvec4 + (parameters + (declare (in) vec4 arg)) + ((return (expression uvec4 bf2u (var_ref arg))))) +)) diff --git a/src/glsl/builtins/ir/intBitsToFloat.ir b/src/glsl/builtins/ir/intBitsToFloat.ir new file mode 100644 index 0000000..05e359b --- /dev/null +++ b/src/glsl/builtins/ir/intBitsToFloat.ir @@ -0,0 +1,21 @@ +((function intBitsToFloat + (signature float + (parameters + (declare (in) int arg)) + ((return (expression float bi2f (var_ref arg))))) + + (signature vec2 + (parameters + (declare (in) ivec2 arg)) + ((return (expression vec2 bi2f (var_ref arg))))) + + (signature vec3 + (parameters + (declare (in) ivec3 arg)) + ((return (expression vec3 bi2f (var_ref arg))))) + + (signature vec4 + (parameters + (declare (in) ivec4 arg)) + ((return (expression vec4 bi2f (var_ref arg))))) +)) diff --git a/src/glsl/builtins/ir/uintBitsToFloat.ir b/src/glsl/builtins/ir/uintBitsToFloat.ir new file mode 100644 index 0000000..46eb263 --- /dev/null +++ b/src/glsl/builtins/ir/uintBitsToFloat.ir @@ -0,0 +1,21 @@ +((function uintBitsToFloat + (signature float + (parameters + (declare (in) uint arg)) + ((return (expression float bu2f (var_ref arg))))) + + (signature vec2 + (parameters + (declare (in) uvec2 arg)) + ((return (expression vec2 bu2f (var_ref arg))))) + + (signature vec3 + (parameters + (declare (in) uvec3 arg)) + ((return (expression vec3 bu2f (var_ref arg))))) + + (signature vec4 + (parameters + (declare (in) uvec4 arg)) + ((return (expression vec4 bu2f (var_ref arg))))) +)) diff --git a/src/glsl/builtins/profiles/ARB_shader_bit_encoding.glsl b/src/glsl/builtins/profiles/ARB_shader_bit_encoding.glsl new file mode 100644 index 0000000..e034594 --- /dev/null +++ b/src/glsl/builtins/profiles/ARB_shader_bit_encoding.glsl @@ -0,0 +1,22 @@ +#version 130 +#extension GL_ARB_shader_bit_encoding : enable + +int floatBitsToInt(float value); +ivec2 floatBitsToInt(vec2 value); +ivec3 floatBitsToInt(vec3 value); +ivec4 floatBitsToInt(vec4 value); + +uint floatBitsToUint(float value); +uvec2 floatBitsToUint(vec2 value); +uvec3 floatBitsToUint(vec3 value); +uvec4 floatBitsToUint(vec4 value); + +float intBitsToFloat(int value); +vec2 intBitsToFloat(ivec2 value); +vec3 intBitsToFloat(ivec3 value); +vec4 intBitsToFloat(ivec4 value); + +float uintBitsToFloat(uint value); +vec2 uintBitsToFloat(uvec2 value); +vec3 uintBitsToFloat(uvec3 value); +vec4 uintBitsToFloat(uvec4 value); diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp index 782d19a..edff9b6 100644 --- a/src/glsl/ir.cpp +++ b/src/glsl/ir.cpp @@ -428,6 +428,10 @@ static const char *const operator_strs[] = { "u2f", "i2u", "u2i", + "bi2f", + "bf2i", + "bu2f", + "bf2u", "any", "trunc", "ceil", diff --git a/src/glsl/ir.h b/src/glsl/ir.h index 9db6c84..6808a94 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -858,6 +858,10 @@ enum ir_expression_operation { ir_unop_u2f, /**< Unsigned-to-float conversion. */ ir_unop_i2u, /**< Integer-to-unsigned conversion. */ ir_unop_u2i, /**< Unsigned-to-integer conversion. */ + ir_unop_bi2f, /**< Bit-identical int-to-float "conversion" */ + ir_unop_bf2i, /**< Bit-identical float-to-int "conversion" */ + ir_unop_bu2f, /**< Bit-identical uint-to-float "conversion" */ + ir_unop_bf2u, /**< Bit-identical float-to-uint "conversion" */ ir_unop_any, /** -- 1.7.10.rc3.1.gb306 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev