diff options
author | marha <marha@users.sourceforge.net> | 2013-09-10 09:01:25 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-09-10 09:01:25 +0200 |
commit | 889d7dd8e94a5538f388cc619115bf5c0b6fc0b7 (patch) | |
tree | bdda17693281525be9d48886acf2dc89ac4c66b4 /mesalib/src/glsl/ir_builder.cpp | |
parent | 2414a1de3cc17f438219f8f2a58b530d33e99a5e (diff) | |
download | vcxsrv-889d7dd8e94a5538f388cc619115bf5c0b6fc0b7.tar.gz vcxsrv-889d7dd8e94a5538f388cc619115bf5c0b6fc0b7.tar.bz2 vcxsrv-889d7dd8e94a5538f388cc619115bf5c0b6fc0b7.zip |
fontconfig libX11 libXmu libxcb mesa xserver git update 10 Sep 2013
xserver commit 47ff382d1fce25a8b097d45b79489e891f1f1228
libxcb commit f1405d9fe4a6ddcae24585ba254389a4c4f4c8c9
libX11 commit cb107760df33ffc8630677e66e2e50aa37950a5c
libXmu commit 2539e539eafdac88177c8ee30b043c5d52f017e4
fontconfig commit a61e145304da86c8c35b137493bbd8fd5dd1e7f5
mesa commit 395b9410860371a64d6b5f2d50679f29eb41729e
Diffstat (limited to 'mesalib/src/glsl/ir_builder.cpp')
-rw-r--r-- | mesalib/src/glsl/ir_builder.cpp | 129 |
1 files changed, 127 insertions, 2 deletions
diff --git a/mesalib/src/glsl/ir_builder.cpp b/mesalib/src/glsl/ir_builder.cpp index 7d9cf5e47..98b432295 100644 --- a/mesalib/src/glsl/ir_builder.cpp +++ b/mesalib/src/glsl/ir_builder.cpp @@ -46,13 +46,14 @@ ir_factory::make_temp(const glsl_type *type, const char *name) } ir_assignment * -assign(deref lhs, operand rhs, int writemask) +assign(deref lhs, operand rhs, operand condition, int writemask) { void *mem_ctx = ralloc_parent(lhs.val); ir_assignment *assign = new(mem_ctx) ir_assignment(lhs.val, rhs.val, - NULL, writemask); + condition.val, + writemask); return assign; } @@ -63,6 +64,25 @@ assign(deref lhs, operand rhs) return assign(lhs, rhs, (1 << lhs.val->type->vector_elements) - 1); } +ir_assignment * +assign(deref lhs, operand rhs, int writemask) +{ + return assign(lhs, rhs, (ir_rvalue *) NULL, writemask); +} + +ir_assignment * +assign(deref lhs, operand rhs, operand condition) +{ + return assign(lhs, rhs, condition, (1 << lhs.val->type->vector_elements) - 1); +} + +ir_return * +ret(operand retval) +{ + void *mem_ctx = ralloc_parent(retval.val); + return new(mem_ctx) ir_return(retval.val); +} + ir_swizzle * swizzle(operand a, int swizzle, int components) { @@ -173,6 +193,14 @@ expr(ir_expression_operation op, operand a, operand b) return new(mem_ctx) ir_expression(op, a.val, b.val); } +ir_expression * +expr(ir_expression_operation op, operand a, operand b, operand c) +{ + void *mem_ctx = ralloc_parent(a.val); + + return new(mem_ctx) ir_expression(op, a.val, b.val, c.val); +} + ir_expression *add(operand a, operand b) { return expr(ir_binop_add, a, b); @@ -203,6 +231,17 @@ ir_expression *dot(operand a, operand b) return expr(ir_binop_dot, a, b); } +/* dot for vectors, mul for scalars */ +ir_expression *dotlike(operand a, operand b) +{ + assert(a.val->type == b.val->type); + + if (a.val->type->vector_elements == 1) + return expr(ir_binop_mul, a, b); + + return expr(ir_binop_dot, a, b); +} + ir_expression* clamp(operand a, operand b, operand c) { @@ -225,6 +264,54 @@ abs(operand a) return expr(ir_unop_abs, a); } +ir_expression * +neg(operand a) +{ + return expr(ir_unop_neg, a); +} + +ir_expression * +sin(operand a) +{ + return expr(ir_unop_sin, a); +} + +ir_expression * +cos(operand a) +{ + return expr(ir_unop_cos, a); +} + +ir_expression * +exp(operand a) +{ + return expr(ir_unop_exp, a); +} + +ir_expression * +rsq(operand a) +{ + return expr(ir_unop_rsq, a); +} + +ir_expression * +sqrt(operand a) +{ + return expr(ir_unop_sqrt, a); +} + +ir_expression * +log(operand a) +{ + return expr(ir_unop_log, a); +} + +ir_expression * +sign(operand a) +{ + return expr(ir_unop_sign, a); +} + ir_expression* equal(operand a, operand b) { @@ -381,6 +468,44 @@ b2i(operand a) return expr(ir_unop_b2i, a); } +ir_expression * +f2b(operand a) +{ + return expr(ir_unop_f2b, a); +} + +ir_expression * +b2f(operand a) +{ + return expr(ir_unop_b2f, a); +} + +ir_expression * +fma(operand a, operand b, operand c) +{ + return expr(ir_triop_fma, a, b, c); +} + +ir_expression * +lrp(operand x, operand y, operand a) +{ + return expr(ir_triop_lrp, x, y, a); +} + +ir_expression * +csel(operand a, operand b, operand c) +{ + return expr(ir_triop_csel, a, b, c); +} + +ir_expression * +bitfield_insert(operand a, operand b, operand c, operand d) +{ + void *mem_ctx = ralloc_parent(a.val); + return new(mem_ctx) ir_expression(ir_quadop_bitfield_insert, + a.val->type, a.val, b.val, c.val, d.val); +} + ir_if* if_tree(operand condition, ir_instruction *then_branch) |