mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
Revert "i965/fs: Change fs_visitor::emit_lrp to use MAC for gen<6"
This reverts commita6860100b8. Why this code didn't work in all circumstances is unknown and without a working Ironlake simulator (which uses a different AUB format) we'll probably never know, short of a lot of experimentation, and spending a bunch of time to try to optimize a few instructions on Ironlake is not time well spent. Moreover, for mix(vec4, vec4, vec4) using the accumulator introduces a dependence between the otherwise independent per-component calculations. Not using the accumulator, even if it means an extra instruction per component might be preferable. We don't know, we don't have data, and we don't have the necessary register on Ironlake for shader_time to tell us. Cc: "10.2" <mesa-stable@lists.freedesktop.org> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77707 Acked-by: Kenneth Graunke <kenneth@whitecape.org> (cherry picked from commitc2c639ecf6)
This commit is contained in:
parent
bc4b9467af
commit
03e93f6079
1 changed files with 7 additions and 4 deletions
|
|
@ -221,15 +221,18 @@ fs_visitor::emit_lrp(const fs_reg &dst, const fs_reg &x, const fs_reg &y,
|
|||
!y.is_valid_3src() ||
|
||||
!a.is_valid_3src()) {
|
||||
/* We can't use the LRP instruction. Emit x*(1-a) + y*a. */
|
||||
fs_reg y_times_a = fs_reg(this, glsl_type::float_type);
|
||||
fs_reg one_minus_a = fs_reg(this, glsl_type::float_type);
|
||||
fs_reg x_times_one_minus_a = fs_reg(this, glsl_type::float_type);
|
||||
|
||||
emit(MUL(y_times_a, y, a));
|
||||
|
||||
fs_reg negative_a = a;
|
||||
negative_a.negate = !a.negate;
|
||||
|
||||
emit(ADD(one_minus_a, negative_a, fs_reg(1.0f)));
|
||||
fs_inst *mul = emit(MUL(reg_null_f, y, a));
|
||||
mul->writes_accumulator = true;
|
||||
emit(MAC(dst, x, one_minus_a));
|
||||
emit(MUL(x_times_one_minus_a, x, one_minus_a));
|
||||
|
||||
emit(ADD(dst, x_times_one_minus_a, y_times_a));
|
||||
} else {
|
||||
/* The LRP instruction actually does op1 * op0 + op2 * (1 - op0), so
|
||||
* we need to reorder the operands.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue