I’ve just started getting into the magical world of shaders, and this line from the UnityDocs bothers me:

fixed: low precision fixed point.

Generally 11 bits, with a range of

–2.0 to +2.0 and 1/256th precision.

How are those 11 bits being used? To get 1/256th precision 8 bits must be for the fractional part, 1 bit for the sign, leaving 2 bits for the integer part. However that would make the true possible range [-4.0, 4.0) though! Am I missing something that requires the use of the extra integer bit? Or is this one of those “the precise implementation depends on the platform” things?

The closest thing I can find that makes sense is from here:

The fixed data type corresponds to a

native signed fixed-point integers

with the range [-2.0,+2.0), sometimes

called fx12. This type provides 10

fractional bits of precision.

That makes perfect sense to me. 12 bits: 1 for sign, 1 for integer part, 10 for fractional part. Resulting in the expected range with “1/1024th precision” as the Unity docs would say.