mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 20:50:09 +01:00
ir_to_mesa: add logic_not and f2b to get CorrectParse2.frag working.
This commit is contained in:
parent
c5ca73e72c
commit
1d20862c8a
2 changed files with 32 additions and 0 deletions
|
|
@ -195,6 +195,27 @@ ir_to_mesa_visitor::create_tree(int op,
|
|||
return tree;
|
||||
}
|
||||
|
||||
struct mbtree *
|
||||
ir_to_mesa_visitor::create_tree_for_float(ir_instruction *ir, float val)
|
||||
{
|
||||
struct mbtree *tree = (struct mbtree *)calloc(sizeof(struct mbtree), 1);
|
||||
|
||||
tree = this->create_tree(MB_TERM_reference_vec4, ir, NULL, NULL);
|
||||
|
||||
/* FINISHME: This will end up being _mesa_add_unnamed_constant,
|
||||
* which handles sharing values and sharing channels of vec4
|
||||
* constants for small values.
|
||||
*/
|
||||
/* FINISHME: Do something with the constant values for now.
|
||||
*/
|
||||
(void)val;
|
||||
ir_to_mesa_set_tree_reg(tree, PROGRAM_CONSTANT, this->next_constant++);
|
||||
tree->src_reg.swizzle = SWIZZLE_NOOP;
|
||||
|
||||
this->result = tree;
|
||||
return tree;
|
||||
}
|
||||
|
||||
/**
|
||||
* In the initial pass of codegen, we assign temporary numbers to
|
||||
* intermediate results. (not SSA -- variable assignments will reuse
|
||||
|
|
@ -344,6 +365,11 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
|
|||
this->result = NULL;
|
||||
|
||||
switch (ir->operation) {
|
||||
case ir_unop_logic_not:
|
||||
this->result = this->create_tree_for_float(ir, 0.0);
|
||||
this->result = this->create_tree(MB_TERM_seq_vec4_vec4, ir,
|
||||
op[0], this->result);
|
||||
break;
|
||||
case ir_unop_exp:
|
||||
this->result = this->create_tree(MB_TERM_exp_vec4, ir, op[0], NULL);
|
||||
break;
|
||||
|
|
@ -416,6 +442,11 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
|
|||
case ir_unop_f2i:
|
||||
this->result = this->create_tree(MB_TERM_trunc_vec4, ir, op[0], NULL);
|
||||
break;
|
||||
case ir_unop_f2b:
|
||||
this->result = this->create_tree_for_float(ir, 0.0);
|
||||
this->result = this->create_tree(MB_TERM_sne_vec4_vec4, ir,
|
||||
op[0], this->result);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ public:
|
|||
ir_instruction *ir,
|
||||
struct mbtree *left,
|
||||
struct mbtree *right);
|
||||
struct mbtree *create_tree_for_float(ir_instruction *ir, float val);
|
||||
|
||||
/**
|
||||
* \name Visit methods
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue