diff options
author | marha <marha@users.sourceforge.net> | 2012-06-18 08:30:48 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-06-18 08:30:48 +0200 |
commit | c264407352572f07e31695637d3d78d07ae0bae8 (patch) | |
tree | cf44f0d28a474db43950161c02bba835285ba383 /mesalib/src/glsl | |
parent | 369603df0452765724d3b53cd77a9f4bf3809fa1 (diff) | |
parent | a3691edaff553b5130c97ff912ecaa96f08a6643 (diff) | |
download | vcxsrv-c264407352572f07e31695637d3d78d07ae0bae8.tar.gz vcxsrv-c264407352572f07e31695637d3d78d07ae0bae8.tar.bz2 vcxsrv-c264407352572f07e31695637d3d78d07ae0bae8.zip |
Merge remote-tracking branch 'origin/released'
Diffstat (limited to 'mesalib/src/glsl')
-rw-r--r-- | mesalib/src/glsl/ast_function.cpp | 3 | ||||
-rw-r--r-- | mesalib/src/glsl/ir.cpp | 2 | ||||
-rw-r--r-- | mesalib/src/glsl/ir.h | 1 | ||||
-rw-r--r-- | mesalib/src/glsl/ir_constant_expression.cpp | 6 | ||||
-rw-r--r-- | mesalib/src/glsl/ir_validate.cpp | 4 |
5 files changed, 14 insertions, 2 deletions
diff --git a/mesalib/src/glsl/ast_function.cpp b/mesalib/src/glsl/ast_function.cpp index 9e7c5995f..ea3282c5f 100644 --- a/mesalib/src/glsl/ast_function.cpp +++ b/mesalib/src/glsl/ast_function.cpp @@ -452,8 +452,7 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) result = new(ctx) ir_expression(ir_unop_i2u, src); break; case GLSL_TYPE_FLOAT: - result = new(ctx) ir_expression(ir_unop_i2u, - new(ctx) ir_expression(ir_unop_f2i, src)); + result = new(ctx) ir_expression(ir_unop_f2u, src); break; case GLSL_TYPE_BOOL: result = new(ctx) ir_expression(ir_unop_i2u, diff --git a/mesalib/src/glsl/ir.cpp b/mesalib/src/glsl/ir.cpp index f81bfd1ab..1c9eec6e2 100644 --- a/mesalib/src/glsl/ir.cpp +++ b/mesalib/src/glsl/ir.cpp @@ -299,6 +299,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0) break; case ir_unop_i2u: + case ir_unop_f2u: case ir_unop_bitcast_f2u: this->type = glsl_type::get_instance(GLSL_TYPE_UINT, op0->type->vector_elements, 1); @@ -428,6 +429,7 @@ static const char *const operator_strs[] = { "exp2", "log2", "f2i", + "f2u", "i2f", "f2b", "b2f", diff --git a/mesalib/src/glsl/ir.h b/mesalib/src/glsl/ir.h index 55535b2f5..014f3630d 100644 --- a/mesalib/src/glsl/ir.h +++ b/mesalib/src/glsl/ir.h @@ -896,6 +896,7 @@ enum ir_expression_operation { ir_unop_exp2, ir_unop_log2, ir_unop_f2i, /**< Float-to-integer conversion. */ + ir_unop_f2u, /**< Float-to-unsigned conversion. */ ir_unop_i2f, /**< Integer-to-float conversion. */ ir_unop_f2b, /**< Float-to-boolean conversion */ ir_unop_b2f, /**< Boolean-to-float conversion */ diff --git a/mesalib/src/glsl/ir_constant_expression.cpp b/mesalib/src/glsl/ir_constant_expression.cpp index 38a1ed96c..17b54b923 100644 --- a/mesalib/src/glsl/ir_constant_expression.cpp +++ b/mesalib/src/glsl/ir_constant_expression.cpp @@ -182,6 +182,12 @@ ir_expression::constant_expression_value(struct hash_table *variable_context) data.i[c] = (int) op[0]->value.f[c]; } break; + case ir_unop_f2u: + assert(op[0]->type->base_type == GLSL_TYPE_FLOAT); + for (unsigned c = 0; c < op[0]->type->components(); c++) { + data.i[c] = (unsigned) op[0]->value.f[c]; + } + break; case ir_unop_i2f: assert(op[0]->type->base_type == GLSL_TYPE_INT); for (unsigned c = 0; c < op[0]->type->components(); c++) { diff --git a/mesalib/src/glsl/ir_validate.cpp b/mesalib/src/glsl/ir_validate.cpp index 5721717a5..191d39831 100644 --- a/mesalib/src/glsl/ir_validate.cpp +++ b/mesalib/src/glsl/ir_validate.cpp @@ -256,6 +256,10 @@ ir_validate::visit_leave(ir_expression *ir) assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); assert(ir->type->base_type == GLSL_TYPE_INT); break; + case ir_unop_f2u: + assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); + assert(ir->type->base_type == GLSL_TYPE_UINT); + break; case ir_unop_i2f: assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); assert(ir->type->base_type == GLSL_TYPE_FLOAT); |