diff options
author | Ian Romanick <[email protected]> | 2016-07-07 13:57:11 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2016-10-04 16:53:32 -0700 |
commit | c42fe30c8650a5bd19b22289f33a7ed35e427057 (patch) | |
tree | 841a7c201c877c23eded9c2b40962caef5c466b9 /src/mesa | |
parent | bb290b5679745e3b7f84dd14174aae6688ab4cac (diff) |
glsl: Kill __intrinsic_atomic_sub
Just generate an __intrinsic_atomic_add with a negated parameter.
Some background on the non-obvious reasons for the the big change to
builtin_builder::call()... this is cribbed from some discussion with
Ilia on mesa-dev.
Why change builtin_builder::call() to allow taking dereferences and
create them here rather than just feeding in the ir_variables directly?
The problem is the neg_data ir_variable node would have to be in two
lists at the same time: the instruction stream and parameters. The
ir_variable node is automatically added to the instruction stream by the
call to make_temp. Restructuring the code so that the ir_variables
could be in parameters then move them to the instruction stream would
have been pretty terrible.
ir_call in the instruction stream has an exec_list that contains
ir_dereference_variable nodes.
The builtin_builder::call method previously took an exec_list of
ir_variables and created a list of ir_dereference_variable. All of the
original users of that method wanted to make a function call using
exactly the set of parameters passed to the built-in function (i.e.,
call __intrinsic_atomic_add using the parameters to atomicAdd). For
these users, the list of ir_variables already existed: the list of
parameters in the built-in function signature.
This new caller doesn't do that. It wants to call a function with a
parameter from the function and a value calculated in the function. So,
I changed builtin_builder::call to take a list that could either be a
list of ir_variable or a list of ir_dereference_variable. In the former
case it behaves just as it previously did. In the latter case, it uses
(and removes from the input list) the ir_dereference_variable nodes
instead of creating new ones.
text data bss dec hex filename
6036395 283160 28608 6348163 60dd83 lib64/i965_dri.so before
6036923 283160 28608 6348691 60df93 lib64/i965_dri.so after
Signed-off-by: Ian Romanick <[email protected]>
Acked-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 10 |
1 files changed, 0 insertions, 10 deletions
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 749008b0fe1..bb88196780e 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -3218,15 +3218,6 @@ glsl_to_tgsi_visitor::visit_atomic_counter_intrinsic(ir_call *ir) data2 = this->result; break; } - case ir_intrinsic_atomic_counter_sub: { - opcode = TGSI_OPCODE_ATOMUADD; - st_src_reg res = get_temp(glsl_type::uvec4_type); - st_dst_reg dstres = st_dst_reg(res); - dstres.writemask = dst.writemask; - emit_asm(ir, TGSI_OPCODE_INEG, dstres, data); - data = res; - break; - } default: assert(!"Unexpected intrinsic"); return; @@ -3672,7 +3663,6 @@ glsl_to_tgsi_visitor::visit(ir_call *ir) case ir_intrinsic_atomic_counter_increment: case ir_intrinsic_atomic_counter_predecrement: case ir_intrinsic_atomic_counter_add: - case ir_intrinsic_atomic_counter_sub: case ir_intrinsic_atomic_counter_min: case ir_intrinsic_atomic_counter_max: case ir_intrinsic_atomic_counter_and: |