9a6a4e7032
This adds shader support for using a three-channel one-dimensional look-up table for de/encoding input colors. This operation will be useful for applying EOTF or its inverse, in other words, gamma curves. It will also be useful in optimizing a following 3D LUT tap distribution once support for 3D LUT is added. Even though called three-channel and one-dimensional, it is actually implemented as a one-channel two-dimensional texture with four rows. Each row corresponds to a source color channel except the fourth one is unused. The reason for having the fourth row is to get texture coordinates in 1/8 steps instead of 1/6 steps. 1/6 may would not be exact in floating- or fixed-point arithmetic and might perhaps risk unintended results from bilinear texture filtering when we want linear filtering only in x but not in y texture coordinates. I may be paranoid. The LUT is applied on source colors after they have been converted to straight RGB. It cannot be applied with pre-multiplied alpha. A LUT can be used for both applying EOTF to go from source color space to blending color space, and EOTF^-1 to go from blending space to output (electrical) space. However, this type of LUT cannot do color space conversions. For now, this feature is hardcoded to off everywhere, to be enabled in following patches. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>