glsl: New unary opcodes for ARB_shader_bit_encoding support.

The opcodes are bitcast_f2u, bitcast_f2i, bitcast_i2f and bitcast_u2f.

Signed-off-by: Olivier Galibert <galibert@pobox.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Olivier Galibert 2012-05-08 20:40:32 +02:00 committed by Kenneth Graunke
parent 199771bc32
commit 500dcbb1aa
7 changed files with 125 additions and 11 deletions

View file

@ -0,0 +1,21 @@
((function floatBitsToInt
(signature int
(parameters
(declare (in) float arg))
((return (expression int bitcast_f2i (var_ref arg)))))
(signature ivec2
(parameters
(declare (in) vec2 arg))
((return (expression ivec2 bitcast_f2i (var_ref arg)))))
(signature ivec3
(parameters
(declare (in) vec3 arg))
((return (expression ivec3 bitcast_f2i (var_ref arg)))))
(signature ivec4
(parameters
(declare (in) vec4 arg))
((return (expression ivec4 bitcast_f2i (var_ref arg)))))
))

View file

@ -0,0 +1,21 @@
((function floatBitsToUint
(signature uint
(parameters
(declare (in) float arg))
((return (expression uint bitcast_f2u (var_ref arg)))))
(signature uvec2
(parameters
(declare (in) vec2 arg))
((return (expression uvec2 bitcast_f2u (var_ref arg)))))
(signature uvec3
(parameters
(declare (in) vec3 arg))
((return (expression uvec3 bitcast_f2u (var_ref arg)))))
(signature uvec4
(parameters
(declare (in) vec4 arg))
((return (expression uvec4 bitcast_f2u (var_ref arg)))))
))

View file

@ -0,0 +1,21 @@
((function intBitsToFloat
(signature float
(parameters
(declare (in) int arg))
((return (expression float bitcast_i2f (var_ref arg)))))
(signature vec2
(parameters
(declare (in) ivec2 arg))
((return (expression vec2 bitcast_i2f (var_ref arg)))))
(signature vec3
(parameters
(declare (in) ivec3 arg))
((return (expression vec3 bitcast_i2f (var_ref arg)))))
(signature vec4
(parameters
(declare (in) ivec4 arg))
((return (expression vec4 bitcast_i2f (var_ref arg)))))
))

View file

@ -0,0 +1,21 @@
((function uintBitsToFloat
(signature float
(parameters
(declare (in) uint arg))
((return (expression float bitcast_u2f (var_ref arg)))))
(signature vec2
(parameters
(declare (in) uvec2 arg))
((return (expression vec2 bitcast_u2f (var_ref arg)))))
(signature vec3
(parameters
(declare (in) uvec3 arg))
((return (expression vec3 bitcast_u2f (var_ref arg)))))
(signature vec4
(parameters
(declare (in) uvec4 arg))
((return (expression vec4 bitcast_u2f (var_ref arg)))))
))

View file

@ -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);

View file

@ -427,6 +427,10 @@ static const char *const operator_strs[] = {
"u2f",
"i2u",
"u2i",
"bitcast_i2f",
"bitcast_f2i",
"bitcast_u2f",
"bitcast_f2u",
"any",
"trunc",
"ceil",

View file

@ -864,19 +864,23 @@ enum ir_expression_operation {
ir_unop_rcp,
ir_unop_rsq,
ir_unop_sqrt,
ir_unop_exp, /**< Log base e on gentype */
ir_unop_log, /**< Natural log on gentype */
ir_unop_exp, /**< Log base e on gentype */
ir_unop_log, /**< Natural log on gentype */
ir_unop_exp2,
ir_unop_log2,
ir_unop_f2i, /**< Float-to-integer conversion. */
ir_unop_i2f, /**< Integer-to-float conversion. */
ir_unop_f2b, /**< Float-to-boolean conversion */
ir_unop_b2f, /**< Boolean-to-float conversion */
ir_unop_i2b, /**< int-to-boolean conversion */
ir_unop_b2i, /**< Boolean-to-int conversion */
ir_unop_u2f, /**< Unsigned-to-float conversion. */
ir_unop_i2u, /**< Integer-to-unsigned conversion. */
ir_unop_u2i, /**< Unsigned-to-integer conversion. */
ir_unop_f2i, /**< Float-to-integer conversion. */
ir_unop_i2f, /**< Integer-to-float conversion. */
ir_unop_f2b, /**< Float-to-boolean conversion */
ir_unop_b2f, /**< Boolean-to-float conversion */
ir_unop_i2b, /**< int-to-boolean conversion */
ir_unop_b2i, /**< Boolean-to-int conversion */
ir_unop_u2f, /**< Unsigned-to-float conversion. */
ir_unop_i2u, /**< Integer-to-unsigned conversion. */
ir_unop_u2i, /**< Unsigned-to-integer conversion. */
ir_unop_bitcast_i2f, /**< Bit-identical int-to-float "conversion" */
ir_unop_bitcast_f2i, /**< Bit-identical float-to-int "conversion" */
ir_unop_bitcast_u2f, /**< Bit-identical uint-to-float "conversion" */
ir_unop_bitcast_f2u, /**< Bit-identical float-to-uint "conversion" */
ir_unop_any,
/**