Adding new convenience emitters makes it easier to generate IR involving these opcodes.
bitfield_insert is particularly useful, since there is no expr() for quadops. Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/glsl/ir_builder.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ src/glsl/ir_builder.h | 13 ++++++++++ 2 files changed, 79 insertions(+) diff --git a/src/glsl/ir_builder.cpp b/src/glsl/ir_builder.cpp index e12ae3c..31a457d 100644 --- a/src/glsl/ir_builder.cpp +++ b/src/glsl/ir_builder.cpp @@ -264,6 +264,46 @@ 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) { @@ -420,6 +460,32 @@ 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 * +lrp(operand a, operand b, operand c) +{ + return expr(ir_triop_lrp, 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) diff --git a/src/glsl/ir_builder.h b/src/glsl/ir_builder.h index 091cf40..e4477b5 100644 --- a/src/glsl/ir_builder.h +++ b/src/glsl/ir_builder.h @@ -140,6 +140,14 @@ ir_expression *dotlike(operand a, operand b); ir_expression *clamp(operand a, operand b, operand c); ir_expression *saturate(operand a); ir_expression *abs(operand a); +ir_expression *neg(operand a); +ir_expression *sin(operand a); +ir_expression *cos(operand a); +ir_expression *exp(operand a); +ir_expression *rsq(operand a); +ir_expression *sqrt(operand a); +ir_expression *log(operand a); +ir_expression *sign(operand a); ir_expression *equal(operand a, operand b); ir_expression *nequal(operand a, operand b); @@ -170,6 +178,11 @@ ir_expression *i2u(operand a); ir_expression *u2i(operand a); ir_expression *b2i(operand a); ir_expression *i2b(operand a); +ir_expression *f2b(operand a); +ir_expression *b2f(operand a); + +ir_expression *lrp(operand a, operand b, operand c); +ir_expression *bitfield_insert(operand a, operand b, operand c, operand d); ir_swizzle *swizzle(operand a, int swizzle, int components); /** -- 1.8.3.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev