[Mesa-dev] [PATCH] nvc0/lowering: Handle conversions to U64/S64 manually
Hans de Goede
hdegoede at redhat.com
Mon Apr 18 09:21:31 UTC 2016
On 17-04-16 22:27, Pierre Moreau wrote:
> On 04:17 PM - Apr 17 2016, Ilia Mirkin wrote:
>> On Sun, Apr 17, 2016 at 4:07 PM, Pierre Moreau <pierre.morrow at free.fr> wrote:
>>> Ping :-)
>>> On 10:56 PM - Mar 19 2016, Pierre Moreau wrote:
>>>> Generating a `cvt u32 $r0 u64 $r1d` or a `cvt u64 $r0d u32 $r2` makes the GPU
>>>> unhappy. Instead, manually handle the conversion between 64-bit and 32-bit
>>>> values, and use `cvt` to convert between the original target (resp. source)
>>>> and 32-bit value. This happens to be the behaviour of NVIDIA's driver.
>>>> Signed-off-by: Pierre Moreau <pierre.morrow at free.fr>
>>>> .../nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 59 ++++++++++++++++++++++
>>>> .../nouveau/codegen/nv50_ir_lowering_nvc0.h | 1 +
>>>> 2 files changed, 60 insertions(+)
>>>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
>>>> index 2719f2c..c419a68 100644
>>>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
>>>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
>>>> @@ -1859,6 +1859,63 @@ NVC0LoweringPass::handleOUT(Instruction *i)
>>>> return true;
>>>> +NVC0LoweringPass::handleCVT(Instruction *i)
>>>> + if (isFloatType(i->dType) || isFloatType(i->sType) ||
>>>> + isSignedIntType(i->dType) xor isSignedIntType(i->sType))
>> I know pre-C89 features are cool, but let's avoid using them. I know
>> characters like ^ were uncommon on the 1960's and 1970's teletypes,
>> but I think we're past those days now.
> Yeah… Will fix that.
So "xor" or "^" is bitwise not logical, since isSignedIntType() returns
a bool, which when cast to an int is guaranteed to be 0 or 1, this
should work fine.
And being a bitwise op its presedence means it will get evaluated
before the "||" operators in your condition which I believe is what
we want here, but can we please have a pair of parenthesis around the
"^" and its operands to make this more clear ?
More information about the mesa-dev