Search Issue Tracker

By Design

Votes

5

Found in

5.5.0p4

Issue ID

898788

Regression

No

[Metal] Half-precision literal in HLSL is translated to float literal by Metal shader compiler

Shaders

-

-

Priority: 7Not yet prioritized for a release

-

Severity: 3Workaround is possible

Reproduction steps:
1) Open the attached project (HLSLHalfLiteralBecomesMetalFloatLiteral.zip).
2) Open "MobileBloom.shader".
3) Observe the literal "half4(0.01h, 0.01h, 0.01h, 0.01h)" in "half4 fragBloom ( v2f_simple i ) : SV_Target".
4) Select "MobileBloom.shader".
5) Open drop-down menu of the "Compile and show code" button in the inspector window.
6) Tick "Custom:", then under "Custom:" tick "Metal".
7) Push the "Compile and show code" button to view View "Compiled-Hidden-FastBloom.shader" file.
8) Observe the literal "float4(0.00999999978, 0.00999999978, 0.00999999978, 0.00999999978)" in "fragment Mtl_FragmentOut xlatMtlMain".

This doesn't occur when compiling to OpenGL.

Actual behavior:
- float4(0.00999999978, 0.00999999978, 0.00999999978, 0.00999999978) is generated in the Metal shader.

Expected behavior:
- half4(0.01h, 0.01h, 0.01h, 0.01h) is generated in the Metal shader.

Reproduced with:
2017.1.0f3, 2017.1.0b1, 5.6.0f3, 5.5.0p4

Comments (4)

  1. 03118e220b899e938a356eb6216ddf02?d=mm

    modrickthebrave

    Dec 30, 2017 23:31

    Just an FYI, I noticed that Metal can have a problem with a divide by a constant value with the h suffix added to the literal, I was able to work around this issue in converting byte values to half float values via this little util method:

    // This method accepts 4 byte range input values and encodes them as a half4 vector
    // that works properly on A7 class hardware. The issue with A7 devices is that
    // there seems to be a compler bug or range issue with an operation like (x / 255.0h).
    // What should be the same operation (x / 255.0) does not show the range problem on A7.

    half4
    encodeBytesAsHalf4(const ushort4 b4) {
    return half4(b4.x/255.0, b4.y/255.0, b4.z/255.0, b4.a/255.0);
    }

  2. 7f61bda9f0068f56eabd7a4dff82562c?d=mm

    max_viorama

    Aug 13, 2017 21:00

    i stubmbled upon the same problem in unity 2017.1 any comments to when this will be fixed, or how to work around?

  3. 7f32babefcb6726146282dd931d3317e?d=mm

    Chris-Hoo

    Jul 17, 2017 13:36

    Hope it could be fixed in 5.6.x !

  4. 7f32babefcb6726146282dd931d3317e?d=mm

    Chris-Hoo

    Jul 15, 2017 17:59

    ah ha~~ liar!
    this bug is not fixed in 2017.1

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.