[Mesa-dev] [PATCH 2/6] New unary opcodes for ARB_shader_bit_encoding support.

Olivier Galibert galibert at pobox.com
Mon Apr 30 04:19:02 PDT 2012


The opcodes are bf2u, bf2i, bi2f and bu2f, with "b" meaning bitwise
conversions.

Signed-off-by: Olivier Galibert <galibert at 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



More information about the mesa-dev mailing list