diff options
author | Dave Airlie <[email protected]> | 2015-04-24 10:47:03 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2015-07-23 17:25:34 +1000 |
commit | 884df9ef834d6b77226d0dfd778c5317365a2394 (patch) | |
tree | e3a93b3f51683bdb0ed69148bac9760de408504c | |
parent | 30681c3bb80ad78392f1740aa915efa072c837e8 (diff) |
glsl/ir: allow ir_call to handle subroutine calling
This adds a ir_variable which contains the subroutine uniform
and an array rvalue for the deref of that uniform, these
are stored in the ir_call and lowered later.
Reviewed-by: Chris Forbes <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
-rw-r--r-- | src/glsl/ir.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/glsl/ir.h b/src/glsl/ir.h index da867427e1a..ede8caa6e47 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -1712,7 +1712,18 @@ public: ir_call(ir_function_signature *callee, ir_dereference_variable *return_deref, exec_list *actual_parameters) - : ir_instruction(ir_type_call), return_deref(return_deref), callee(callee) + : ir_instruction(ir_type_call), return_deref(return_deref), callee(callee), sub_var(NULL), array_idx(NULL) + { + assert(callee->return_type != NULL); + actual_parameters->move_nodes_to(& this->actual_parameters); + this->use_builtin = callee->is_builtin(); + } + + ir_call(ir_function_signature *callee, + ir_dereference_variable *return_deref, + exec_list *actual_parameters, + ir_variable *var, ir_rvalue *array_idx) + : ir_instruction(ir_type_call), return_deref(return_deref), callee(callee), sub_var(var), array_idx(array_idx) { assert(callee->return_type != NULL); actual_parameters->move_nodes_to(& this->actual_parameters); @@ -1760,6 +1771,14 @@ public: /** Should this call only bind to a built-in function? */ bool use_builtin; + + /* + * ARB_shader_subroutine support - + * the subroutine uniform variable and array index + * rvalue to be used in the lowering pass later. + */ + ir_variable *sub_var; + ir_rvalue *array_idx; }; |