<div dir="auto">I'm sure radeonsi will handle UCMP with modifiers too. (which is basically gallivm)<div dir="auto"><br></div><div dir="auto">Marek</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mar 6, 2017 1:06 PM, "Roland Scheidegger" <<a href="mailto:sroland@vmware.com">sroland@vmware.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Am 04.03.2017 um 20:45 schrieb Ilia Mirkin:<br>
> Also, how is this happening in the first place? For example, we have:<br>
><br>
>    case ir_unop_bitcast_f2i:<br>
>    case ir_unop_bitcast_f2u:<br>
>       /* Make sure we don't propagate the negate modifier to integer opcodes. */<br>
>       if (op[0].negate || op[0].abs)<br>
>          emit_asm(ir, TGSI_OPCODE_MOV, result_dst, op[0]);<br>
>       else<br>
>          result_src = op[0];<br>
><br>
> Oh, but it's going directly into a ir_triop_csel, which is missing<br>
> this logic. It should be added there instead, IMHO. OTOH, the same<br>
> issue will hit in emit_block_mov() if you do. Would love to hear some<br>
> other opinions... Marek, Brian, Roland?<br>
<br>
float modifiers used with UCMP are actually just fine in theory - the<br>
UCMP sources are considered floats for the purposes of modifiers (this<br>
is similar to mov which also has untyped sources, except that 1 of the<br>
arguments of ucmp indeed is a uint, which cannot have modifiers).<br>
(tgsi_opcode_infer_type() says it's untyped, but<br>
tgsi_opcode_infer_src_type() says it's float though obviously this<br>
doesn't apply to the condition argument.)<br>
<br>
Therefore, not handling float modifiers with ucmp src args is a bug of<br>
the tgsi executor (I'm quite sure llvmpipe will handle it right). Looks<br>
like all source arguments must be the same type there... Seems annoying<br>
to fix actually...<br>
Albeit the gallium docs don't really mention this (this is the same<br>
behavior as dx10 movc). I don't know though if other drivers will handle<br>
it correctly, but if they do it might be a better idea to just fix<br>
tgsi_exec somehow.<br>
<br>
(I'm not sure if the opposite could happen, that is int modifiers<br>
mistakenly going into a ucmp, or if this could be a problem with other<br>
instructions.)<br>
<br>
Roland<br>
<br>
<br>
>   -ilia<br>
><br>
><br>
> On Sat, Mar 4, 2017 at 2:24 PM, Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>> wrote:<br>
>> Hmmm... I wonder if this should only be done for the native_integers<br>
>> case. I'm concerned that this will cause perf regressions on weaker hw<br>
>> like nv30 and r300, as the neg will no longer be inserted as a<br>
>> modifier into the next instruction. Any opinion on this?<br>
>><br>
>> On Sat, Mar 4, 2017 at 2:16 PM, Francisco Jerez <<a href="mailto:currojerez@riseup.net">currojerez@riseup.net</a>> wrote:<br>
>>> Otherwise result_src may be provided to an integer instruction whose<br>
>>> negate modifier has different semantics.  Example is UCMP as in the<br>
>>> bug linked below, where an unrelated change in the GLSL built-in<br>
>>> lowering code for atan2 (<wbr>e9ffd12827ac11a2d2002a42fa8eb1<wbr>df847153ba)<br>
>>> caused the generation of floating-point ir_unop_neg instructions<br>
>>> followed by ir_triop_csel, which is lowered into UCMP on back-ends<br>
>>> with native integer support.<br>
>>><br>
>>> Fixes a regression of piglit glsl-fs-tan-1 on softpipe introduced by<br>
>>> the above-mentioned glsl front-end commit.  Even though the commit<br>
>>> that triggered the regression doesn't seem to have made it to any<br>
>>> stable branches yet, this seems worth back-porting since I don't see<br>
>>> any reason why the bug couldn't have been reproduced before that<br>
>>> point.<br>
>>><br>
>>> Bugzilla: <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__bugs.freedesktop.org_show-5Fbug.cgi-3Fid-3D99817&d=DwIGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=_QIjpv-UJ77xEQY8fIYoQtr5qv8wKrPJc7v7_-CYAb0&m=ak9IRpzPmkscMdh984JOu0Zn2I-efj9Iy3K-Iw9vv04&s=VpboBTuXbZaDL1-iEDED9JFLZTZFsPVqjTSbTuGSuT8&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.<wbr>com/v2/url?u=https-3A__bugs.<wbr>freedesktop.org_show-5Fbug.<wbr>cgi-3Fid-3D99817&d=DwIGaQ&c=<wbr>uilaK90D4TOVoH58JNXRgQ&r=_<wbr>QIjpv-<wbr>UJ77xEQY8fIYoQtr5qv8wKrPJc7v7_<wbr>-CYAb0&m=<wbr>ak9IRpzPmkscMdh984JOu0Zn2I-<wbr>efj9Iy3K-Iw9vv04&s=<wbr>VpboBTuXbZaDL1-<wbr>iEDED9JFLZTZFsPVqjTSbTuGSuT8&<wbr>e=</a><br>
>>> Tested-by: Vinson Lee <<a href="mailto:vlee@freedesktop.org">vlee@freedesktop.org</a>><br>
>>> Cc: <a href="mailto:mesa-stable@lists.freedesktop.org">mesa-stable@lists.freedesktop.<wbr>org</a><br>
>>> ---<br>
>>>  src/mesa/state_tracker/st_<wbr>glsl_to_tgsi.cpp | 2 +-<br>
>>>  1 file changed, 1 insertion(+), 1 deletion(-)<br>
>>><br>
>>> diff --git a/src/mesa/state_tracker/st_<wbr>glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_<wbr>glsl_to_tgsi.cpp<br>
>>> index af41bdb..6bf3c89 100644<br>
>>> --- a/src/mesa/state_tracker/st_<wbr>glsl_to_tgsi.cpp<br>
>>> +++ b/src/mesa/state_tracker/st_<wbr>glsl_to_tgsi.cpp<br>
>>> @@ -1633,7 +1633,7 @@ glsl_to_tgsi_visitor::visit_<wbr>expression(ir_expression* ir, st_src_reg *op)<br>
>>>           emit_asm(ir, TGSI_OPCODE_DNEG, result_dst, op[0]);<br>
>>>        else {<br>
>>>           op[0].negate = ~op[0].negate;<br>
>>> -         result_src = op[0];<br>
>>> +         emit_asm(ir, TGSI_OPCODE_MOV, result_dst, op[0]);<br>
>>>        }<br>
>>>        break;<br>
>>>     case ir_unop_subroutine_to_int:<br>
>>> --<br>
>>> 2.10.2<br>
>>><br>
>>> ______________________________<wbr>_________________<br>
>>> mesa-dev mailing list<br>
>>> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
>>> <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=DwIGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=_QIjpv-UJ77xEQY8fIYoQtr5qv8wKrPJc7v7_-CYAb0&m=ak9IRpzPmkscMdh984JOu0Zn2I-efj9Iy3K-Iw9vv04&s=zkVQuaiGqon4ebXPnKm96V6UnqAVXfGc_ky9Lm_FMKY&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.<wbr>com/v2/url?u=https-3A__lists.<wbr>freedesktop.org_mailman_<wbr>listinfo_mesa-2Ddev&d=DwIGaQ&<wbr>c=uilaK90D4TOVoH58JNXRgQ&r=_<wbr>QIjpv-<wbr>UJ77xEQY8fIYoQtr5qv8wKrPJc7v7_<wbr>-CYAb0&m=<wbr>ak9IRpzPmkscMdh984JOu0Zn2I-<wbr>efj9Iy3K-Iw9vv04&s=<wbr>zkVQuaiGqon4ebXPnKm96V6UnqAVXf<wbr>Gc_ky9Lm_FMKY&e=</a><br>
> ______________________________<wbr>_________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=DwIGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=_QIjpv-UJ77xEQY8fIYoQtr5qv8wKrPJc7v7_-CYAb0&m=ak9IRpzPmkscMdh984JOu0Zn2I-efj9Iy3K-Iw9vv04&s=zkVQuaiGqon4ebXPnKm96V6UnqAVXfGc_ky9Lm_FMKY&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.<wbr>com/v2/url?u=https-3A__lists.<wbr>freedesktop.org_mailman_<wbr>listinfo_mesa-2Ddev&d=DwIGaQ&<wbr>c=uilaK90D4TOVoH58JNXRgQ&r=_<wbr>QIjpv-<wbr>UJ77xEQY8fIYoQtr5qv8wKrPJc7v7_<wbr>-CYAb0&m=<wbr>ak9IRpzPmkscMdh984JOu0Zn2I-<wbr>efj9Iy3K-Iw9vv04&s=<wbr>zkVQuaiGqon4ebXPnKm96V6UnqAVXf<wbr>Gc_ky9Lm_FMKY&e=</a><br>
><br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</blockquote></div></div>