Implement additional unary gentype builtins.
This commit is contained in:
committed by
Ian Romanick
parent
c22c40015d
commit
2eec73f735
+58
-9
@@ -28,20 +28,69 @@
|
||||
#include "ir.h"
|
||||
|
||||
static void
|
||||
generate_exp(exec_list *instructions,
|
||||
ir_variable **declarations,
|
||||
const glsl_type *type)
|
||||
generate_unop(exec_list *instructions,
|
||||
ir_variable **declarations,
|
||||
const glsl_type *type,
|
||||
enum ir_expression_operation op)
|
||||
{
|
||||
ir_dereference *const retval = new ir_dereference(declarations[16]);
|
||||
ir_dereference *const arg = new ir_dereference(declarations[0]);
|
||||
ir_rvalue *result;
|
||||
|
||||
result = new ir_expression(ir_unop_exp, type, arg, NULL);
|
||||
result = new ir_expression(op, type, arg, NULL);
|
||||
|
||||
ir_instruction *inst = new ir_assignment(retval, result, NULL);
|
||||
instructions->push_tail(inst);
|
||||
}
|
||||
|
||||
static void
|
||||
generate_exp(exec_list *instructions,
|
||||
ir_variable **declarations,
|
||||
const glsl_type *type)
|
||||
{
|
||||
generate_unop(instructions, declarations, type, ir_unop_exp);
|
||||
}
|
||||
|
||||
static void
|
||||
generate_log(exec_list *instructions,
|
||||
ir_variable **declarations,
|
||||
const glsl_type *type)
|
||||
{
|
||||
generate_unop(instructions, declarations, type, ir_unop_log);
|
||||
}
|
||||
|
||||
static void
|
||||
generate_rsq(exec_list *instructions,
|
||||
ir_variable **declarations,
|
||||
const glsl_type *type)
|
||||
{
|
||||
generate_unop(instructions, declarations, type, ir_unop_rsq);
|
||||
}
|
||||
|
||||
static void
|
||||
generate_abs(exec_list *instructions,
|
||||
ir_variable **declarations,
|
||||
const glsl_type *type)
|
||||
{
|
||||
generate_unop(instructions, declarations, type, ir_unop_abs);
|
||||
}
|
||||
|
||||
static void
|
||||
generate_ceil(exec_list *instructions,
|
||||
ir_variable **declarations,
|
||||
const glsl_type *type)
|
||||
{
|
||||
generate_unop(instructions, declarations, type, ir_unop_ceil);
|
||||
}
|
||||
|
||||
static void
|
||||
generate_floor(exec_list *instructions,
|
||||
ir_variable **declarations,
|
||||
const glsl_type *type)
|
||||
{
|
||||
generate_unop(instructions, declarations, type, ir_unop_floor);
|
||||
}
|
||||
|
||||
void
|
||||
generate_function_instance(ir_function *f,
|
||||
const char *name,
|
||||
@@ -112,15 +161,15 @@ generate_110_functions(glsl_symbol_table *symtab, exec_list *instructions)
|
||||
/* FINISHME: atan(y/x) */
|
||||
/* FINISHME: pow() */
|
||||
make_gentype_function(symtab, instructions, "exp", generate_exp);
|
||||
/* FINISHME: log() */
|
||||
make_gentype_function(symtab, instructions, "log", generate_log);
|
||||
/* FINISHME: exp2() */
|
||||
/* FINISHME: log2() */
|
||||
/* FINISHME: sqrt() */
|
||||
/* FINISHME: inversesqrt() */
|
||||
/* FINISHME: abs() */
|
||||
make_gentype_function(symtab, instructions, "inversesqrt", generate_rsq);
|
||||
make_gentype_function(symtab, instructions, "abs", generate_abs);
|
||||
/* FINISHME: sign() */
|
||||
/* FINISHME: floor() */
|
||||
/* FINISHME: ceil() */
|
||||
make_gentype_function(symtab, instructions, "floor", generate_floor);
|
||||
make_gentype_function(symtab, instructions, "ceil", generate_ceil);
|
||||
/* FINISHME: fract() */
|
||||
/* FINISHME: mod(x, float y) */
|
||||
/* FINISHME: mod(x, y) */
|
||||
|
||||
Reference in New Issue
Block a user