Steps to reproduce:
1. Create a new unlit shader
2. Put the following code in the fragment function:
```
int x[3][3][3] = {
{
{ -1, -2, -1 }, { -2, -4, -2 }, { -1, -2, -1 }
},
{
{ +0, +0, +0 }, { +0, +0, +0 }
,
{ +0, +0, +0 }
},
{
{ +1, +2, +1 }, { +2, +4, +2 }, { +1, +2, +1 }
}
};
half4 col = tex2D(_MainTex, i.uv);
return col * half4(x[0][0][0], x[1][1][1], x[2][2][2], 1.0);
```
3. Inspect the shader code compiled for GLES3 (same code is used for Vulkan and WebGL/WebGPU).
Actual results:
The data from the array 'x' gets stored as floats using 'intBitsToFloat', then gets converted back to int using 'floatBitsToInt', then gets converted to float using the regular cast.
Expected results:
No interim conversions between bit representations happen.
Reproducible with versions:
2024.1, 2023.3, 2023.2, 2022.3, 2021.3