summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2015-04-24 10:47:03 +1000
committerDave Airlie <[email protected]>2015-07-23 17:25:34 +1000
commit884df9ef834d6b77226d0dfd778c5317365a2394 (patch)
treee3a93b3f51683bdb0ed69148bac9760de408504c /src
parent30681c3bb80ad78392f1740aa915efa072c837e8 (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]>
Diffstat (limited to 'src')
-rw-r--r--src/glsl/ir.h21
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;
};