This is done by checking the number of bitplanes from the image buffer. We assume that for float buffer to use the same bitplanes as it was a byte buffer. Then, the data of the image buffer is packed at the start of the `rect` or `float_rect` before upload. **Statistics - einar.v004.blend ** Note that not all grayscale textures have been stored as BW images so the amount of memory that can be reduced would be more. Without patch ``` 104 Textures - 3294.99 MB (3294.47 MB over 32x32), 37 RTs - 192.52 MB. Avg. tex dimension: 2201.88x1253.51 (2283.53x2202.13 over 32x32) 464 Buffers - 25.01 MB total 1.24 MB IBs 23.50 MB VBs. 3512.52 MB - Grand total GPU buffer + texture load ``` Patch applied ``` 104 Textures - 2917.66 MB (2917.14 MB over 32x32), 39 RTs - 215.45 MB. Avg. tex dimension: 2221.38x1252.75 (2323.28x2253.47 over 32x32) 467 Buffers - 25.01 MB total 1.24 MB IBs 23.51 MB VBs. 3158.13 MB - Grand total GPU buffer + texture load. ``` Reviewed By: fclem Differential Revision: https://developer.blender.org/D15484