Search Issue Tracker
Fixed in 2020.2.X
Fixed in 2018.4.X, 2019.4.X
[Critical] HLSLcc uses an incorrect variable in an if statement when the needed variable is defined below float type matrix
How to reproduce:
1. Open the attached project "1242345.zip"
2. Open the "Test" Scene
3. Open the "Test.compute" Compute Shader by selecting it in Project window and clicking "Open" in the top-right corner of the Inspector window
4. Open the "Test.compute" Compute Shader by selecting it in Project window and clicking "Show compiled code" in the Inspector window
5. Observe lines 26 and 27 in the compiled Compute Shader file (Compiled-Test-.shader)
Expected result: the Compute Shader's "if" statement was compiled using the value of "float(0.0)!=Globals._EnableTonemapping"
Actual result: the Compute Shader's "if" statement was compiled using the value of "float(0.0)!=Globals.hlslcc_mtx3x3_WhitePointTransform.w"
Reproducible with: 2018.4.26f1, 2019.4.6f1, 2020.1.0f1, 2020.2.0a19
Workaround: changing the order of variables in lines 7 (float3x3 _WhitePointTransform;) and 8 (float _EnableTonemapping;) solves the issue
- Tested and reproduces with OpenGLCore, OpenGLES2, OpenGLES3, and Metal APIs
- Not sure if reproduces with Vulkan, DirectX11, and DirectX12 as compiled code is hardly readable
- Only reproduces if the "_WhitePointTransform" variable is a matrix of type float or int (float2x2, float 3x3, int3x3, etc...)
- In case matrix type is an int - "intBitsToFloat" method is called to handle a conversion
- Does not reproduce if the matrix size is 4x4 or 4x3 (float4x4, float4x3)
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
- [iOS] Crash on ScriptingGCHandle::Acquire when calling RequestUserAuthorization without using yield for pending authorization
- Particle is not visible in RenderTexture when Renderer's material is set to Default-Particle and Camera's BG Alpha is set 0
- [Physics] Character Joint jumps around when following Kinetic Rigidbody
- [macOS] There is no way to tell if you are running under Rosetta
- [AssetImport] Changing Graphics APIs in Android platform reimports most of the assets (textures, fonts, ...)