Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/vkms: Add enumerated 1D curve colorop

This patch introduces a VKMS color pipeline that includes two
drm_colorops for named transfer functions. For now the only ones
supported are sRGB EOTF, sRGB Inverse EOTF, and a Linear TF.
We will expand this in the future but I don't want to do so
without accompanying IGT tests.

We introduce a new vkms_luts.c file that hard-codes sRGB EOTF,
sRGB Inverse EOTF, and a linear EOTF LUT. These have been
generated with 256 entries each as IGT is currently testing
only 8 bpc surfaces. We will likely need higher precision
but I'm reluctant to make that change without clear indication
that we need it. We'll revisit and, if necessary, regenerate
the LUTs when we have IGT tests for higher precision buffers.

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: Simon Ser <contact@emersion.fr>
Link: https://patch.msgid.link/20251115000237.3561250-16-alex.hung@amd.com

authored by

Harry Wentland and committed by
Simon Ser
c1e578bd 08b651ca

+968 -2
+3 -1
drivers/gpu/drm/vkms/Makefile
··· 9 9 vkms_writeback.o \ 10 10 vkms_connector.o \ 11 11 vkms_config.o \ 12 - vkms_configfs.o 12 + vkms_configfs.o \ 13 + vkms_colorop.o \ 14 + vkms_luts.o 13 15 14 16 obj-$(CONFIG_DRM_VKMS) += vkms.o 15 17 obj-$(CONFIG_DRM_VKMS_KUNIT_TEST) += tests/
+86
drivers/gpu/drm/vkms/vkms_colorop.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + 3 + #include <linux/slab.h> 4 + #include <drm/drm_colorop.h> 5 + #include <drm/drm_print.h> 6 + #include <drm/drm_property.h> 7 + #include <drm/drm_plane.h> 8 + 9 + #include "vkms_drv.h" 10 + 11 + static const u64 supported_tfs = 12 + BIT(DRM_COLOROP_1D_CURVE_SRGB_EOTF) | 13 + BIT(DRM_COLOROP_1D_CURVE_SRGB_INV_EOTF); 14 + 15 + #define MAX_COLOR_PIPELINE_OPS 2 16 + 17 + static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_prop_enum_list *list) 18 + { 19 + struct drm_colorop *ops[MAX_COLOR_PIPELINE_OPS]; 20 + struct drm_device *dev = plane->dev; 21 + int ret; 22 + int i = 0, j = 0; 23 + 24 + memset(ops, 0, sizeof(ops)); 25 + 26 + /* 1st op: 1d curve */ 27 + ops[i] = kzalloc(sizeof(*ops[i]), GFP_KERNEL); 28 + if (!ops[i]) { 29 + drm_err(dev, "KMS: Failed to allocate colorop\n"); 30 + ret = -ENOMEM; 31 + goto cleanup; 32 + } 33 + 34 + ret = drm_plane_colorop_curve_1d_init(dev, ops[i], plane, supported_tfs); 35 + if (ret) 36 + goto cleanup; 37 + 38 + list->type = ops[i]->base.id; 39 + list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", ops[i]->base.id); 40 + 41 + i++; 42 + 43 + /* 2nd op: 1d curve */ 44 + ops[i] = kzalloc(sizeof(*ops[i]), GFP_KERNEL); 45 + if (!ops[i]) { 46 + drm_err(dev, "KMS: Failed to allocate colorop\n"); 47 + ret = -ENOMEM; 48 + goto cleanup; 49 + } 50 + 51 + ret = drm_plane_colorop_curve_1d_init(dev, ops[i], plane, supported_tfs); 52 + if (ret) 53 + goto cleanup; 54 + 55 + drm_colorop_set_next_property(ops[i - 1], ops[i]); 56 + 57 + return 0; 58 + 59 + cleanup: 60 + for (j = 0; j < i; j++) { 61 + if (ops[j]) { 62 + drm_colorop_cleanup(ops[j]); 63 + kfree(ops[j]); 64 + } 65 + } 66 + 67 + return ret; 68 + } 69 + 70 + int vkms_initialize_colorops(struct drm_plane *plane) 71 + { 72 + struct drm_prop_enum_list pipeline; 73 + int ret; 74 + 75 + /* Add color pipeline */ 76 + ret = vkms_initialize_color_pipeline(plane, &pipeline); 77 + if (ret) 78 + return ret; 79 + 80 + /* Create COLOR_PIPELINE property and attach */ 81 + ret = drm_plane_create_color_pipeline_property(plane, &pipeline, 1); 82 + if (ret) 83 + return ret; 84 + 85 + return 0; 86 + }
+50 -1
drivers/gpu/drm/vkms/vkms_composer.c
··· 14 14 #include <kunit/visibility.h> 15 15 16 16 #include "vkms_composer.h" 17 + #include "vkms_luts.h" 17 18 18 19 static u16 pre_mul_blend_channel(u16 src, u16 dst, u16 alpha) 19 20 { ··· 134 133 pixel->r = apply_lut_to_channel_value(&crtc_state->gamma_lut, pixel->r, LUT_RED); 135 134 pixel->g = apply_lut_to_channel_value(&crtc_state->gamma_lut, pixel->g, LUT_GREEN); 136 135 pixel->b = apply_lut_to_channel_value(&crtc_state->gamma_lut, pixel->b, LUT_BLUE); 136 + } 137 + } 138 + 139 + static void apply_colorop(struct pixel_argb_u16 *pixel, struct drm_colorop *colorop) 140 + { 141 + struct drm_colorop_state *colorop_state = colorop->state; 142 + struct drm_device *dev = colorop->dev; 143 + 144 + if (colorop->type == DRM_COLOROP_1D_CURVE) { 145 + switch (colorop_state->curve_1d_type) { 146 + case DRM_COLOROP_1D_CURVE_SRGB_INV_EOTF: 147 + pixel->r = apply_lut_to_channel_value(&srgb_inv_eotf, pixel->r, LUT_RED); 148 + pixel->g = apply_lut_to_channel_value(&srgb_inv_eotf, pixel->g, LUT_GREEN); 149 + pixel->b = apply_lut_to_channel_value(&srgb_inv_eotf, pixel->b, LUT_BLUE); 150 + break; 151 + case DRM_COLOROP_1D_CURVE_SRGB_EOTF: 152 + pixel->r = apply_lut_to_channel_value(&srgb_eotf, pixel->r, LUT_RED); 153 + pixel->g = apply_lut_to_channel_value(&srgb_eotf, pixel->g, LUT_GREEN); 154 + pixel->b = apply_lut_to_channel_value(&srgb_eotf, pixel->b, LUT_BLUE); 155 + break; 156 + default: 157 + drm_WARN_ONCE(dev, true, 158 + "unknown colorop 1D curve type %d\n", 159 + colorop_state->curve_1d_type); 160 + break; 161 + } 162 + } 163 + } 164 + 165 + static void pre_blend_color_transform(const struct vkms_plane_state *plane_state, 166 + struct line_buffer *output_buffer) 167 + { 168 + for (size_t x = 0; x < output_buffer->n_pixels; x++) { 169 + struct drm_colorop *colorop = plane_state->base.base.color_pipeline; 170 + 171 + while (colorop) { 172 + struct drm_colorop_state *colorop_state; 173 + 174 + colorop_state = colorop->state; 175 + 176 + if (!colorop_state) 177 + return; 178 + 179 + if (!colorop_state->bypass) 180 + apply_colorop(&output_buffer->pixels[x], colorop); 181 + 182 + colorop = colorop->next; 183 + } 137 184 } 138 185 } 139 186 ··· 400 351 */ 401 352 current_plane->pixel_read_line(current_plane, src_x_start, src_y_start, direction, 402 353 pixel_count, &stage_buffer->pixels[dst_x_start]); 403 - 354 + pre_blend_color_transform(current_plane, stage_buffer); 404 355 pre_mul_alpha_blend(stage_buffer, output_buffer, 405 356 dst_x_start, pixel_count); 406 357 }
+1
drivers/gpu/drm/vkms/vkms_drv.c
··· 253 253 254 254 fdev = config->dev->faux_dev; 255 255 256 + drm_colorop_pipeline_destroy(&config->dev->drm); 256 257 drm_dev_unregister(&config->dev->drm); 257 258 drm_atomic_helper_shutdown(&config->dev->drm); 258 259 devres_release_group(&fdev->dev, NULL);
+3
drivers/gpu/drm/vkms/vkms_drv.h
··· 319 319 /* Writeback */ 320 320 int vkms_enable_writeback_connector(struct vkms_device *vkmsdev, struct vkms_output *vkms_out); 321 321 322 + /* Colorops */ 323 + int vkms_initialize_colorops(struct drm_plane *plane); 324 + 322 325 #endif /* _VKMS_DRV_H_ */
+811
drivers/gpu/drm/vkms/vkms_luts.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + 3 + #include <drm/drm_mode.h> 4 + 5 + #include "vkms_drv.h" 6 + #include "vkms_luts.h" 7 + 8 + /* 9 + * These luts were generated with a LUT generated based on 10 + * skia's transfer function code. The LUT generator can be 11 + * found at 12 + * https://gitlab.freedesktop.org/hwentland/lutgen 13 + */ 14 + 15 + static struct drm_color_lut linear_array[LUT_SIZE] = { 16 + { 0x0, 0x0, 0x0, 0 }, 17 + { 0x101, 0x101, 0x101, 0 }, 18 + { 0x202, 0x202, 0x202, 0 }, 19 + { 0x303, 0x303, 0x303, 0 }, 20 + { 0x404, 0x404, 0x404, 0 }, 21 + { 0x505, 0x505, 0x505, 0 }, 22 + { 0x606, 0x606, 0x606, 0 }, 23 + { 0x707, 0x707, 0x707, 0 }, 24 + { 0x808, 0x808, 0x808, 0 }, 25 + { 0x909, 0x909, 0x909, 0 }, 26 + { 0xa0a, 0xa0a, 0xa0a, 0 }, 27 + { 0xb0b, 0xb0b, 0xb0b, 0 }, 28 + { 0xc0c, 0xc0c, 0xc0c, 0 }, 29 + { 0xd0d, 0xd0d, 0xd0d, 0 }, 30 + { 0xe0e, 0xe0e, 0xe0e, 0 }, 31 + { 0xf0f, 0xf0f, 0xf0f, 0 }, 32 + { 0x1010, 0x1010, 0x1010, 0 }, 33 + { 0x1111, 0x1111, 0x1111, 0 }, 34 + { 0x1212, 0x1212, 0x1212, 0 }, 35 + { 0x1313, 0x1313, 0x1313, 0 }, 36 + { 0x1414, 0x1414, 0x1414, 0 }, 37 + { 0x1515, 0x1515, 0x1515, 0 }, 38 + { 0x1616, 0x1616, 0x1616, 0 }, 39 + { 0x1717, 0x1717, 0x1717, 0 }, 40 + { 0x1818, 0x1818, 0x1818, 0 }, 41 + { 0x1919, 0x1919, 0x1919, 0 }, 42 + { 0x1a1a, 0x1a1a, 0x1a1a, 0 }, 43 + { 0x1b1b, 0x1b1b, 0x1b1b, 0 }, 44 + { 0x1c1c, 0x1c1c, 0x1c1c, 0 }, 45 + { 0x1d1d, 0x1d1d, 0x1d1d, 0 }, 46 + { 0x1e1e, 0x1e1e, 0x1e1e, 0 }, 47 + { 0x1f1f, 0x1f1f, 0x1f1f, 0 }, 48 + { 0x2020, 0x2020, 0x2020, 0 }, 49 + { 0x2121, 0x2121, 0x2121, 0 }, 50 + { 0x2222, 0x2222, 0x2222, 0 }, 51 + { 0x2323, 0x2323, 0x2323, 0 }, 52 + { 0x2424, 0x2424, 0x2424, 0 }, 53 + { 0x2525, 0x2525, 0x2525, 0 }, 54 + { 0x2626, 0x2626, 0x2626, 0 }, 55 + { 0x2727, 0x2727, 0x2727, 0 }, 56 + { 0x2828, 0x2828, 0x2828, 0 }, 57 + { 0x2929, 0x2929, 0x2929, 0 }, 58 + { 0x2a2a, 0x2a2a, 0x2a2a, 0 }, 59 + { 0x2b2b, 0x2b2b, 0x2b2b, 0 }, 60 + { 0x2c2c, 0x2c2c, 0x2c2c, 0 }, 61 + { 0x2d2d, 0x2d2d, 0x2d2d, 0 }, 62 + { 0x2e2e, 0x2e2e, 0x2e2e, 0 }, 63 + { 0x2f2f, 0x2f2f, 0x2f2f, 0 }, 64 + { 0x3030, 0x3030, 0x3030, 0 }, 65 + { 0x3131, 0x3131, 0x3131, 0 }, 66 + { 0x3232, 0x3232, 0x3232, 0 }, 67 + { 0x3333, 0x3333, 0x3333, 0 }, 68 + { 0x3434, 0x3434, 0x3434, 0 }, 69 + { 0x3535, 0x3535, 0x3535, 0 }, 70 + { 0x3636, 0x3636, 0x3636, 0 }, 71 + { 0x3737, 0x3737, 0x3737, 0 }, 72 + { 0x3838, 0x3838, 0x3838, 0 }, 73 + { 0x3939, 0x3939, 0x3939, 0 }, 74 + { 0x3a3a, 0x3a3a, 0x3a3a, 0 }, 75 + { 0x3b3b, 0x3b3b, 0x3b3b, 0 }, 76 + { 0x3c3c, 0x3c3c, 0x3c3c, 0 }, 77 + { 0x3d3d, 0x3d3d, 0x3d3d, 0 }, 78 + { 0x3e3e, 0x3e3e, 0x3e3e, 0 }, 79 + { 0x3f3f, 0x3f3f, 0x3f3f, 0 }, 80 + { 0x4040, 0x4040, 0x4040, 0 }, 81 + { 0x4141, 0x4141, 0x4141, 0 }, 82 + { 0x4242, 0x4242, 0x4242, 0 }, 83 + { 0x4343, 0x4343, 0x4343, 0 }, 84 + { 0x4444, 0x4444, 0x4444, 0 }, 85 + { 0x4545, 0x4545, 0x4545, 0 }, 86 + { 0x4646, 0x4646, 0x4646, 0 }, 87 + { 0x4747, 0x4747, 0x4747, 0 }, 88 + { 0x4848, 0x4848, 0x4848, 0 }, 89 + { 0x4949, 0x4949, 0x4949, 0 }, 90 + { 0x4a4a, 0x4a4a, 0x4a4a, 0 }, 91 + { 0x4b4b, 0x4b4b, 0x4b4b, 0 }, 92 + { 0x4c4c, 0x4c4c, 0x4c4c, 0 }, 93 + { 0x4d4d, 0x4d4d, 0x4d4d, 0 }, 94 + { 0x4e4e, 0x4e4e, 0x4e4e, 0 }, 95 + { 0x4f4f, 0x4f4f, 0x4f4f, 0 }, 96 + { 0x5050, 0x5050, 0x5050, 0 }, 97 + { 0x5151, 0x5151, 0x5151, 0 }, 98 + { 0x5252, 0x5252, 0x5252, 0 }, 99 + { 0x5353, 0x5353, 0x5353, 0 }, 100 + { 0x5454, 0x5454, 0x5454, 0 }, 101 + { 0x5555, 0x5555, 0x5555, 0 }, 102 + { 0x5656, 0x5656, 0x5656, 0 }, 103 + { 0x5757, 0x5757, 0x5757, 0 }, 104 + { 0x5858, 0x5858, 0x5858, 0 }, 105 + { 0x5959, 0x5959, 0x5959, 0 }, 106 + { 0x5a5a, 0x5a5a, 0x5a5a, 0 }, 107 + { 0x5b5b, 0x5b5b, 0x5b5b, 0 }, 108 + { 0x5c5c, 0x5c5c, 0x5c5c, 0 }, 109 + { 0x5d5d, 0x5d5d, 0x5d5d, 0 }, 110 + { 0x5e5e, 0x5e5e, 0x5e5e, 0 }, 111 + { 0x5f5f, 0x5f5f, 0x5f5f, 0 }, 112 + { 0x6060, 0x6060, 0x6060, 0 }, 113 + { 0x6161, 0x6161, 0x6161, 0 }, 114 + { 0x6262, 0x6262, 0x6262, 0 }, 115 + { 0x6363, 0x6363, 0x6363, 0 }, 116 + { 0x6464, 0x6464, 0x6464, 0 }, 117 + { 0x6565, 0x6565, 0x6565, 0 }, 118 + { 0x6666, 0x6666, 0x6666, 0 }, 119 + { 0x6767, 0x6767, 0x6767, 0 }, 120 + { 0x6868, 0x6868, 0x6868, 0 }, 121 + { 0x6969, 0x6969, 0x6969, 0 }, 122 + { 0x6a6a, 0x6a6a, 0x6a6a, 0 }, 123 + { 0x6b6b, 0x6b6b, 0x6b6b, 0 }, 124 + { 0x6c6c, 0x6c6c, 0x6c6c, 0 }, 125 + { 0x6d6d, 0x6d6d, 0x6d6d, 0 }, 126 + { 0x6e6e, 0x6e6e, 0x6e6e, 0 }, 127 + { 0x6f6f, 0x6f6f, 0x6f6f, 0 }, 128 + { 0x7070, 0x7070, 0x7070, 0 }, 129 + { 0x7171, 0x7171, 0x7171, 0 }, 130 + { 0x7272, 0x7272, 0x7272, 0 }, 131 + { 0x7373, 0x7373, 0x7373, 0 }, 132 + { 0x7474, 0x7474, 0x7474, 0 }, 133 + { 0x7575, 0x7575, 0x7575, 0 }, 134 + { 0x7676, 0x7676, 0x7676, 0 }, 135 + { 0x7777, 0x7777, 0x7777, 0 }, 136 + { 0x7878, 0x7878, 0x7878, 0 }, 137 + { 0x7979, 0x7979, 0x7979, 0 }, 138 + { 0x7a7a, 0x7a7a, 0x7a7a, 0 }, 139 + { 0x7b7b, 0x7b7b, 0x7b7b, 0 }, 140 + { 0x7c7c, 0x7c7c, 0x7c7c, 0 }, 141 + { 0x7d7d, 0x7d7d, 0x7d7d, 0 }, 142 + { 0x7e7e, 0x7e7e, 0x7e7e, 0 }, 143 + { 0x7f7f, 0x7f7f, 0x7f7f, 0 }, 144 + { 0x8080, 0x8080, 0x8080, 0 }, 145 + { 0x8181, 0x8181, 0x8181, 0 }, 146 + { 0x8282, 0x8282, 0x8282, 0 }, 147 + { 0x8383, 0x8383, 0x8383, 0 }, 148 + { 0x8484, 0x8484, 0x8484, 0 }, 149 + { 0x8585, 0x8585, 0x8585, 0 }, 150 + { 0x8686, 0x8686, 0x8686, 0 }, 151 + { 0x8787, 0x8787, 0x8787, 0 }, 152 + { 0x8888, 0x8888, 0x8888, 0 }, 153 + { 0x8989, 0x8989, 0x8989, 0 }, 154 + { 0x8a8a, 0x8a8a, 0x8a8a, 0 }, 155 + { 0x8b8b, 0x8b8b, 0x8b8b, 0 }, 156 + { 0x8c8c, 0x8c8c, 0x8c8c, 0 }, 157 + { 0x8d8d, 0x8d8d, 0x8d8d, 0 }, 158 + { 0x8e8e, 0x8e8e, 0x8e8e, 0 }, 159 + { 0x8f8f, 0x8f8f, 0x8f8f, 0 }, 160 + { 0x9090, 0x9090, 0x9090, 0 }, 161 + { 0x9191, 0x9191, 0x9191, 0 }, 162 + { 0x9292, 0x9292, 0x9292, 0 }, 163 + { 0x9393, 0x9393, 0x9393, 0 }, 164 + { 0x9494, 0x9494, 0x9494, 0 }, 165 + { 0x9595, 0x9595, 0x9595, 0 }, 166 + { 0x9696, 0x9696, 0x9696, 0 }, 167 + { 0x9797, 0x9797, 0x9797, 0 }, 168 + { 0x9898, 0x9898, 0x9898, 0 }, 169 + { 0x9999, 0x9999, 0x9999, 0 }, 170 + { 0x9a9a, 0x9a9a, 0x9a9a, 0 }, 171 + { 0x9b9b, 0x9b9b, 0x9b9b, 0 }, 172 + { 0x9c9c, 0x9c9c, 0x9c9c, 0 }, 173 + { 0x9d9d, 0x9d9d, 0x9d9d, 0 }, 174 + { 0x9e9e, 0x9e9e, 0x9e9e, 0 }, 175 + { 0x9f9f, 0x9f9f, 0x9f9f, 0 }, 176 + { 0xa0a0, 0xa0a0, 0xa0a0, 0 }, 177 + { 0xa1a1, 0xa1a1, 0xa1a1, 0 }, 178 + { 0xa2a2, 0xa2a2, 0xa2a2, 0 }, 179 + { 0xa3a3, 0xa3a3, 0xa3a3, 0 }, 180 + { 0xa4a4, 0xa4a4, 0xa4a4, 0 }, 181 + { 0xa5a5, 0xa5a5, 0xa5a5, 0 }, 182 + { 0xa6a6, 0xa6a6, 0xa6a6, 0 }, 183 + { 0xa7a7, 0xa7a7, 0xa7a7, 0 }, 184 + { 0xa8a8, 0xa8a8, 0xa8a8, 0 }, 185 + { 0xa9a9, 0xa9a9, 0xa9a9, 0 }, 186 + { 0xaaaa, 0xaaaa, 0xaaaa, 0 }, 187 + { 0xabab, 0xabab, 0xabab, 0 }, 188 + { 0xacac, 0xacac, 0xacac, 0 }, 189 + { 0xadad, 0xadad, 0xadad, 0 }, 190 + { 0xaeae, 0xaeae, 0xaeae, 0 }, 191 + { 0xafaf, 0xafaf, 0xafaf, 0 }, 192 + { 0xb0b0, 0xb0b0, 0xb0b0, 0 }, 193 + { 0xb1b1, 0xb1b1, 0xb1b1, 0 }, 194 + { 0xb2b2, 0xb2b2, 0xb2b2, 0 }, 195 + { 0xb3b3, 0xb3b3, 0xb3b3, 0 }, 196 + { 0xb4b4, 0xb4b4, 0xb4b4, 0 }, 197 + { 0xb5b5, 0xb5b5, 0xb5b5, 0 }, 198 + { 0xb6b6, 0xb6b6, 0xb6b6, 0 }, 199 + { 0xb7b7, 0xb7b7, 0xb7b7, 0 }, 200 + { 0xb8b8, 0xb8b8, 0xb8b8, 0 }, 201 + { 0xb9b9, 0xb9b9, 0xb9b9, 0 }, 202 + { 0xbaba, 0xbaba, 0xbaba, 0 }, 203 + { 0xbbbb, 0xbbbb, 0xbbbb, 0 }, 204 + { 0xbcbc, 0xbcbc, 0xbcbc, 0 }, 205 + { 0xbdbd, 0xbdbd, 0xbdbd, 0 }, 206 + { 0xbebe, 0xbebe, 0xbebe, 0 }, 207 + { 0xbfbf, 0xbfbf, 0xbfbf, 0 }, 208 + { 0xc0c0, 0xc0c0, 0xc0c0, 0 }, 209 + { 0xc1c1, 0xc1c1, 0xc1c1, 0 }, 210 + { 0xc2c2, 0xc2c2, 0xc2c2, 0 }, 211 + { 0xc3c3, 0xc3c3, 0xc3c3, 0 }, 212 + { 0xc4c4, 0xc4c4, 0xc4c4, 0 }, 213 + { 0xc5c5, 0xc5c5, 0xc5c5, 0 }, 214 + { 0xc6c6, 0xc6c6, 0xc6c6, 0 }, 215 + { 0xc7c7, 0xc7c7, 0xc7c7, 0 }, 216 + { 0xc8c8, 0xc8c8, 0xc8c8, 0 }, 217 + { 0xc9c9, 0xc9c9, 0xc9c9, 0 }, 218 + { 0xcaca, 0xcaca, 0xcaca, 0 }, 219 + { 0xcbcb, 0xcbcb, 0xcbcb, 0 }, 220 + { 0xcccc, 0xcccc, 0xcccc, 0 }, 221 + { 0xcdcd, 0xcdcd, 0xcdcd, 0 }, 222 + { 0xcece, 0xcece, 0xcece, 0 }, 223 + { 0xcfcf, 0xcfcf, 0xcfcf, 0 }, 224 + { 0xd0d0, 0xd0d0, 0xd0d0, 0 }, 225 + { 0xd1d1, 0xd1d1, 0xd1d1, 0 }, 226 + { 0xd2d2, 0xd2d2, 0xd2d2, 0 }, 227 + { 0xd3d3, 0xd3d3, 0xd3d3, 0 }, 228 + { 0xd4d4, 0xd4d4, 0xd4d4, 0 }, 229 + { 0xd5d5, 0xd5d5, 0xd5d5, 0 }, 230 + { 0xd6d6, 0xd6d6, 0xd6d6, 0 }, 231 + { 0xd7d7, 0xd7d7, 0xd7d7, 0 }, 232 + { 0xd8d8, 0xd8d8, 0xd8d8, 0 }, 233 + { 0xd9d9, 0xd9d9, 0xd9d9, 0 }, 234 + { 0xdada, 0xdada, 0xdada, 0 }, 235 + { 0xdbdb, 0xdbdb, 0xdbdb, 0 }, 236 + { 0xdcdc, 0xdcdc, 0xdcdc, 0 }, 237 + { 0xdddd, 0xdddd, 0xdddd, 0 }, 238 + { 0xdede, 0xdede, 0xdede, 0 }, 239 + { 0xdfdf, 0xdfdf, 0xdfdf, 0 }, 240 + { 0xe0e0, 0xe0e0, 0xe0e0, 0 }, 241 + { 0xe1e1, 0xe1e1, 0xe1e1, 0 }, 242 + { 0xe2e2, 0xe2e2, 0xe2e2, 0 }, 243 + { 0xe3e3, 0xe3e3, 0xe3e3, 0 }, 244 + { 0xe4e4, 0xe4e4, 0xe4e4, 0 }, 245 + { 0xe5e5, 0xe5e5, 0xe5e5, 0 }, 246 + { 0xe6e6, 0xe6e6, 0xe6e6, 0 }, 247 + { 0xe7e7, 0xe7e7, 0xe7e7, 0 }, 248 + { 0xe8e8, 0xe8e8, 0xe8e8, 0 }, 249 + { 0xe9e9, 0xe9e9, 0xe9e9, 0 }, 250 + { 0xeaea, 0xeaea, 0xeaea, 0 }, 251 + { 0xebeb, 0xebeb, 0xebeb, 0 }, 252 + { 0xecec, 0xecec, 0xecec, 0 }, 253 + { 0xeded, 0xeded, 0xeded, 0 }, 254 + { 0xeeee, 0xeeee, 0xeeee, 0 }, 255 + { 0xefef, 0xefef, 0xefef, 0 }, 256 + { 0xf0f0, 0xf0f0, 0xf0f0, 0 }, 257 + { 0xf1f1, 0xf1f1, 0xf1f1, 0 }, 258 + { 0xf2f2, 0xf2f2, 0xf2f2, 0 }, 259 + { 0xf3f3, 0xf3f3, 0xf3f3, 0 }, 260 + { 0xf4f4, 0xf4f4, 0xf4f4, 0 }, 261 + { 0xf5f5, 0xf5f5, 0xf5f5, 0 }, 262 + { 0xf6f6, 0xf6f6, 0xf6f6, 0 }, 263 + { 0xf7f7, 0xf7f7, 0xf7f7, 0 }, 264 + { 0xf8f8, 0xf8f8, 0xf8f8, 0 }, 265 + { 0xf9f9, 0xf9f9, 0xf9f9, 0 }, 266 + { 0xfafa, 0xfafa, 0xfafa, 0 }, 267 + { 0xfbfb, 0xfbfb, 0xfbfb, 0 }, 268 + { 0xfcfc, 0xfcfc, 0xfcfc, 0 }, 269 + { 0xfdfd, 0xfdfd, 0xfdfd, 0 }, 270 + { 0xfefe, 0xfefe, 0xfefe, 0 }, 271 + { 0xffff, 0xffff, 0xffff, 0 }, 272 + }; 273 + 274 + const struct vkms_color_lut linear_eotf = { 275 + .base = linear_array, 276 + .lut_length = LUT_SIZE, 277 + .channel_value2index_ratio = 0xff00ffll 278 + }; 279 + EXPORT_SYMBOL(linear_eotf); 280 + 281 + static struct drm_color_lut srgb_array[LUT_SIZE] = { 282 + { 0x0, 0x0, 0x0, 0 }, 283 + { 0x13, 0x13, 0x13, 0 }, 284 + { 0x27, 0x27, 0x27, 0 }, 285 + { 0x3b, 0x3b, 0x3b, 0 }, 286 + { 0x4f, 0x4f, 0x4f, 0 }, 287 + { 0x63, 0x63, 0x63, 0 }, 288 + { 0x77, 0x77, 0x77, 0 }, 289 + { 0x8b, 0x8b, 0x8b, 0 }, 290 + { 0x9f, 0x9f, 0x9f, 0 }, 291 + { 0xb3, 0xb3, 0xb3, 0 }, 292 + { 0xc6, 0xc6, 0xc6, 0 }, 293 + { 0xdb, 0xdb, 0xdb, 0 }, 294 + { 0xf0, 0xf0, 0xf0, 0 }, 295 + { 0x107, 0x107, 0x107, 0 }, 296 + { 0x11f, 0x11f, 0x11f, 0 }, 297 + { 0x139, 0x139, 0x139, 0 }, 298 + { 0x153, 0x153, 0x153, 0 }, 299 + { 0x16f, 0x16f, 0x16f, 0 }, 300 + { 0x18c, 0x18c, 0x18c, 0 }, 301 + { 0x1aa, 0x1aa, 0x1aa, 0 }, 302 + { 0x1ca, 0x1ca, 0x1ca, 0 }, 303 + { 0x1eb, 0x1eb, 0x1eb, 0 }, 304 + { 0x20d, 0x20d, 0x20d, 0 }, 305 + { 0x231, 0x231, 0x231, 0 }, 306 + { 0x256, 0x256, 0x256, 0 }, 307 + { 0x27d, 0x27d, 0x27d, 0 }, 308 + { 0x2a4, 0x2a4, 0x2a4, 0 }, 309 + { 0x2ce, 0x2ce, 0x2ce, 0 }, 310 + { 0x2f9, 0x2f9, 0x2f9, 0 }, 311 + { 0x325, 0x325, 0x325, 0 }, 312 + { 0x352, 0x352, 0x352, 0 }, 313 + { 0x381, 0x381, 0x381, 0 }, 314 + { 0x3b2, 0x3b2, 0x3b2, 0 }, 315 + { 0x3e4, 0x3e4, 0x3e4, 0 }, 316 + { 0x418, 0x418, 0x418, 0 }, 317 + { 0x44d, 0x44d, 0x44d, 0 }, 318 + { 0x484, 0x484, 0x484, 0 }, 319 + { 0x4bc, 0x4bc, 0x4bc, 0 }, 320 + { 0x4f6, 0x4f6, 0x4f6, 0 }, 321 + { 0x531, 0x531, 0x531, 0 }, 322 + { 0x56e, 0x56e, 0x56e, 0 }, 323 + { 0x5ad, 0x5ad, 0x5ad, 0 }, 324 + { 0x5ed, 0x5ed, 0x5ed, 0 }, 325 + { 0x62f, 0x62f, 0x62f, 0 }, 326 + { 0x672, 0x672, 0x672, 0 }, 327 + { 0x6b7, 0x6b7, 0x6b7, 0 }, 328 + { 0x6fe, 0x6fe, 0x6fe, 0 }, 329 + { 0x746, 0x746, 0x746, 0 }, 330 + { 0x791, 0x791, 0x791, 0 }, 331 + { 0x7dc, 0x7dc, 0x7dc, 0 }, 332 + { 0x82a, 0x82a, 0x82a, 0 }, 333 + { 0x879, 0x879, 0x879, 0 }, 334 + { 0x8ca, 0x8ca, 0x8ca, 0 }, 335 + { 0x91d, 0x91d, 0x91d, 0 }, 336 + { 0x971, 0x971, 0x971, 0 }, 337 + { 0x9c7, 0x9c7, 0x9c7, 0 }, 338 + { 0xa1f, 0xa1f, 0xa1f, 0 }, 339 + { 0xa79, 0xa79, 0xa79, 0 }, 340 + { 0xad4, 0xad4, 0xad4, 0 }, 341 + { 0xb32, 0xb32, 0xb32, 0 }, 342 + { 0xb91, 0xb91, 0xb91, 0 }, 343 + { 0xbf2, 0xbf2, 0xbf2, 0 }, 344 + { 0xc54, 0xc54, 0xc54, 0 }, 345 + { 0xcb9, 0xcb9, 0xcb9, 0 }, 346 + { 0xd1f, 0xd1f, 0xd1f, 0 }, 347 + { 0xd88, 0xd88, 0xd88, 0 }, 348 + { 0xdf2, 0xdf2, 0xdf2, 0 }, 349 + { 0xe5e, 0xe5e, 0xe5e, 0 }, 350 + { 0xecc, 0xecc, 0xecc, 0 }, 351 + { 0xf3c, 0xf3c, 0xf3c, 0 }, 352 + { 0xfad, 0xfad, 0xfad, 0 }, 353 + { 0x1021, 0x1021, 0x1021, 0 }, 354 + { 0x1096, 0x1096, 0x1096, 0 }, 355 + { 0x110e, 0x110e, 0x110e, 0 }, 356 + { 0x1187, 0x1187, 0x1187, 0 }, 357 + { 0x1203, 0x1203, 0x1203, 0 }, 358 + { 0x1280, 0x1280, 0x1280, 0 }, 359 + { 0x12ff, 0x12ff, 0x12ff, 0 }, 360 + { 0x1380, 0x1380, 0x1380, 0 }, 361 + { 0x1404, 0x1404, 0x1404, 0 }, 362 + { 0x1489, 0x1489, 0x1489, 0 }, 363 + { 0x1510, 0x1510, 0x1510, 0 }, 364 + { 0x1599, 0x1599, 0x1599, 0 }, 365 + { 0x1624, 0x1624, 0x1624, 0 }, 366 + { 0x16b2, 0x16b2, 0x16b2, 0 }, 367 + { 0x1741, 0x1741, 0x1741, 0 }, 368 + { 0x17d2, 0x17d2, 0x17d2, 0 }, 369 + { 0x1865, 0x1865, 0x1865, 0 }, 370 + { 0x18fb, 0x18fb, 0x18fb, 0 }, 371 + { 0x1992, 0x1992, 0x1992, 0 }, 372 + { 0x1a2c, 0x1a2c, 0x1a2c, 0 }, 373 + { 0x1ac8, 0x1ac8, 0x1ac8, 0 }, 374 + { 0x1b65, 0x1b65, 0x1b65, 0 }, 375 + { 0x1c05, 0x1c05, 0x1c05, 0 }, 376 + { 0x1ca7, 0x1ca7, 0x1ca7, 0 }, 377 + { 0x1d4b, 0x1d4b, 0x1d4b, 0 }, 378 + { 0x1df1, 0x1df1, 0x1df1, 0 }, 379 + { 0x1e99, 0x1e99, 0x1e99, 0 }, 380 + { 0x1f44, 0x1f44, 0x1f44, 0 }, 381 + { 0x1ff0, 0x1ff0, 0x1ff0, 0 }, 382 + { 0x209f, 0x209f, 0x209f, 0 }, 383 + { 0x2150, 0x2150, 0x2150, 0 }, 384 + { 0x2203, 0x2203, 0x2203, 0 }, 385 + { 0x22b8, 0x22b8, 0x22b8, 0 }, 386 + { 0x2370, 0x2370, 0x2370, 0 }, 387 + { 0x2429, 0x2429, 0x2429, 0 }, 388 + { 0x24e5, 0x24e5, 0x24e5, 0 }, 389 + { 0x25a3, 0x25a3, 0x25a3, 0 }, 390 + { 0x2663, 0x2663, 0x2663, 0 }, 391 + { 0x2726, 0x2726, 0x2726, 0 }, 392 + { 0x27ea, 0x27ea, 0x27ea, 0 }, 393 + { 0x28b1, 0x28b1, 0x28b1, 0 }, 394 + { 0x297a, 0x297a, 0x297a, 0 }, 395 + { 0x2a45, 0x2a45, 0x2a45, 0 }, 396 + { 0x2b13, 0x2b13, 0x2b13, 0 }, 397 + { 0x2be3, 0x2be3, 0x2be3, 0 }, 398 + { 0x2cb5, 0x2cb5, 0x2cb5, 0 }, 399 + { 0x2d89, 0x2d89, 0x2d89, 0 }, 400 + { 0x2e60, 0x2e60, 0x2e60, 0 }, 401 + { 0x2f39, 0x2f39, 0x2f39, 0 }, 402 + { 0x3014, 0x3014, 0x3014, 0 }, 403 + { 0x30f2, 0x30f2, 0x30f2, 0 }, 404 + { 0x31d2, 0x31d2, 0x31d2, 0 }, 405 + { 0x32b4, 0x32b4, 0x32b4, 0 }, 406 + { 0x3398, 0x3398, 0x3398, 0 }, 407 + { 0x347f, 0x347f, 0x347f, 0 }, 408 + { 0x3569, 0x3569, 0x3569, 0 }, 409 + { 0x3654, 0x3654, 0x3654, 0 }, 410 + { 0x3742, 0x3742, 0x3742, 0 }, 411 + { 0x3832, 0x3832, 0x3832, 0 }, 412 + { 0x3925, 0x3925, 0x3925, 0 }, 413 + { 0x3a1a, 0x3a1a, 0x3a1a, 0 }, 414 + { 0x3b11, 0x3b11, 0x3b11, 0 }, 415 + { 0x3c0b, 0x3c0b, 0x3c0b, 0 }, 416 + { 0x3d07, 0x3d07, 0x3d07, 0 }, 417 + { 0x3e05, 0x3e05, 0x3e05, 0 }, 418 + { 0x3f06, 0x3f06, 0x3f06, 0 }, 419 + { 0x400a, 0x400a, 0x400a, 0 }, 420 + { 0x410f, 0x410f, 0x410f, 0 }, 421 + { 0x4218, 0x4218, 0x4218, 0 }, 422 + { 0x4322, 0x4322, 0x4322, 0 }, 423 + { 0x442f, 0x442f, 0x442f, 0 }, 424 + { 0x453f, 0x453f, 0x453f, 0 }, 425 + { 0x4650, 0x4650, 0x4650, 0 }, 426 + { 0x4765, 0x4765, 0x4765, 0 }, 427 + { 0x487c, 0x487c, 0x487c, 0 }, 428 + { 0x4995, 0x4995, 0x4995, 0 }, 429 + { 0x4ab1, 0x4ab1, 0x4ab1, 0 }, 430 + { 0x4bcf, 0x4bcf, 0x4bcf, 0 }, 431 + { 0x4cf0, 0x4cf0, 0x4cf0, 0 }, 432 + { 0x4e13, 0x4e13, 0x4e13, 0 }, 433 + { 0x4f39, 0x4f39, 0x4f39, 0 }, 434 + { 0x5061, 0x5061, 0x5061, 0 }, 435 + { 0x518b, 0x518b, 0x518b, 0 }, 436 + { 0x52b9, 0x52b9, 0x52b9, 0 }, 437 + { 0x53e8, 0x53e8, 0x53e8, 0 }, 438 + { 0x551b, 0x551b, 0x551b, 0 }, 439 + { 0x5650, 0x5650, 0x5650, 0 }, 440 + { 0x5787, 0x5787, 0x5787, 0 }, 441 + { 0x58c1, 0x58c1, 0x58c1, 0 }, 442 + { 0x59fd, 0x59fd, 0x59fd, 0 }, 443 + { 0x5b3c, 0x5b3c, 0x5b3c, 0 }, 444 + { 0x5c7e, 0x5c7e, 0x5c7e, 0 }, 445 + { 0x5dc2, 0x5dc2, 0x5dc2, 0 }, 446 + { 0x5f09, 0x5f09, 0x5f09, 0 }, 447 + { 0x6052, 0x6052, 0x6052, 0 }, 448 + { 0x619e, 0x619e, 0x619e, 0 }, 449 + { 0x62ec, 0x62ec, 0x62ec, 0 }, 450 + { 0x643d, 0x643d, 0x643d, 0 }, 451 + { 0x6591, 0x6591, 0x6591, 0 }, 452 + { 0x66e7, 0x66e7, 0x66e7, 0 }, 453 + { 0x6840, 0x6840, 0x6840, 0 }, 454 + { 0x699b, 0x699b, 0x699b, 0 }, 455 + { 0x6afa, 0x6afa, 0x6afa, 0 }, 456 + { 0x6c5a, 0x6c5a, 0x6c5a, 0 }, 457 + { 0x6dbe, 0x6dbe, 0x6dbe, 0 }, 458 + { 0x6f24, 0x6f24, 0x6f24, 0 }, 459 + { 0x708c, 0x708c, 0x708c, 0 }, 460 + { 0x71f8, 0x71f8, 0x71f8, 0 }, 461 + { 0x7366, 0x7366, 0x7366, 0 }, 462 + { 0x74d6, 0x74d6, 0x74d6, 0 }, 463 + { 0x764a, 0x764a, 0x764a, 0 }, 464 + { 0x77c0, 0x77c0, 0x77c0, 0 }, 465 + { 0x7938, 0x7938, 0x7938, 0 }, 466 + { 0x7ab4, 0x7ab4, 0x7ab4, 0 }, 467 + { 0x7c32, 0x7c32, 0x7c32, 0 }, 468 + { 0x7db3, 0x7db3, 0x7db3, 0 }, 469 + { 0x7f36, 0x7f36, 0x7f36, 0 }, 470 + { 0x80bc, 0x80bc, 0x80bc, 0 }, 471 + { 0x8245, 0x8245, 0x8245, 0 }, 472 + { 0x83d1, 0x83d1, 0x83d1, 0 }, 473 + { 0x855f, 0x855f, 0x855f, 0 }, 474 + { 0x86f0, 0x86f0, 0x86f0, 0 }, 475 + { 0x8884, 0x8884, 0x8884, 0 }, 476 + { 0x8a1a, 0x8a1a, 0x8a1a, 0 }, 477 + { 0x8bb4, 0x8bb4, 0x8bb4, 0 }, 478 + { 0x8d50, 0x8d50, 0x8d50, 0 }, 479 + { 0x8eee, 0x8eee, 0x8eee, 0 }, 480 + { 0x9090, 0x9090, 0x9090, 0 }, 481 + { 0x9234, 0x9234, 0x9234, 0 }, 482 + { 0x93db, 0x93db, 0x93db, 0 }, 483 + { 0x9585, 0x9585, 0x9585, 0 }, 484 + { 0x9732, 0x9732, 0x9732, 0 }, 485 + { 0x98e1, 0x98e1, 0x98e1, 0 }, 486 + { 0x9a93, 0x9a93, 0x9a93, 0 }, 487 + { 0x9c48, 0x9c48, 0x9c48, 0 }, 488 + { 0x9e00, 0x9e00, 0x9e00, 0 }, 489 + { 0x9fbb, 0x9fbb, 0x9fbb, 0 }, 490 + { 0xa178, 0xa178, 0xa178, 0 }, 491 + { 0xa338, 0xa338, 0xa338, 0 }, 492 + { 0xa4fb, 0xa4fb, 0xa4fb, 0 }, 493 + { 0xa6c1, 0xa6c1, 0xa6c1, 0 }, 494 + { 0xa88a, 0xa88a, 0xa88a, 0 }, 495 + { 0xaa56, 0xaa56, 0xaa56, 0 }, 496 + { 0xac24, 0xac24, 0xac24, 0 }, 497 + { 0xadf5, 0xadf5, 0xadf5, 0 }, 498 + { 0xafc9, 0xafc9, 0xafc9, 0 }, 499 + { 0xb1a0, 0xb1a0, 0xb1a0, 0 }, 500 + { 0xb37a, 0xb37a, 0xb37a, 0 }, 501 + { 0xb557, 0xb557, 0xb557, 0 }, 502 + { 0xb736, 0xb736, 0xb736, 0 }, 503 + { 0xb919, 0xb919, 0xb919, 0 }, 504 + { 0xbafe, 0xbafe, 0xbafe, 0 }, 505 + { 0xbce6, 0xbce6, 0xbce6, 0 }, 506 + { 0xbed2, 0xbed2, 0xbed2, 0 }, 507 + { 0xc0c0, 0xc0c0, 0xc0c0, 0 }, 508 + { 0xc2b0, 0xc2b0, 0xc2b0, 0 }, 509 + { 0xc4a4, 0xc4a4, 0xc4a4, 0 }, 510 + { 0xc69b, 0xc69b, 0xc69b, 0 }, 511 + { 0xc895, 0xc895, 0xc895, 0 }, 512 + { 0xca91, 0xca91, 0xca91, 0 }, 513 + { 0xcc91, 0xcc91, 0xcc91, 0 }, 514 + { 0xce93, 0xce93, 0xce93, 0 }, 515 + { 0xd098, 0xd098, 0xd098, 0 }, 516 + { 0xd2a1, 0xd2a1, 0xd2a1, 0 }, 517 + { 0xd4ac, 0xd4ac, 0xd4ac, 0 }, 518 + { 0xd6ba, 0xd6ba, 0xd6ba, 0 }, 519 + { 0xd8cb, 0xd8cb, 0xd8cb, 0 }, 520 + { 0xdadf, 0xdadf, 0xdadf, 0 }, 521 + { 0xdcf7, 0xdcf7, 0xdcf7, 0 }, 522 + { 0xdf11, 0xdf11, 0xdf11, 0 }, 523 + { 0xe12e, 0xe12e, 0xe12e, 0 }, 524 + { 0xe34e, 0xe34e, 0xe34e, 0 }, 525 + { 0xe571, 0xe571, 0xe571, 0 }, 526 + { 0xe796, 0xe796, 0xe796, 0 }, 527 + { 0xe9bf, 0xe9bf, 0xe9bf, 0 }, 528 + { 0xebeb, 0xebeb, 0xebeb, 0 }, 529 + { 0xee1a, 0xee1a, 0xee1a, 0 }, 530 + { 0xf04c, 0xf04c, 0xf04c, 0 }, 531 + { 0xf281, 0xf281, 0xf281, 0 }, 532 + { 0xf4b9, 0xf4b9, 0xf4b9, 0 }, 533 + { 0xf6f4, 0xf6f4, 0xf6f4, 0 }, 534 + { 0xf932, 0xf932, 0xf932, 0 }, 535 + { 0xfb73, 0xfb73, 0xfb73, 0 }, 536 + { 0xfdb7, 0xfdb7, 0xfdb7, 0 }, 537 + { 0xffff, 0xffff, 0xffff, 0 }, 538 + }; 539 + 540 + const struct vkms_color_lut srgb_eotf = { 541 + .base = srgb_array, 542 + .lut_length = LUT_SIZE, 543 + .channel_value2index_ratio = 0xff00ffll 544 + }; 545 + EXPORT_SYMBOL(srgb_eotf); 546 + 547 + static struct drm_color_lut srgb_inv_array[LUT_SIZE] = { 548 + { 0x0, 0x0, 0x0, 0 }, 549 + { 0xcc2, 0xcc2, 0xcc2, 0 }, 550 + { 0x15be, 0x15be, 0x15be, 0 }, 551 + { 0x1c56, 0x1c56, 0x1c56, 0 }, 552 + { 0x21bd, 0x21bd, 0x21bd, 0 }, 553 + { 0x2666, 0x2666, 0x2666, 0 }, 554 + { 0x2a8a, 0x2a8a, 0x2a8a, 0 }, 555 + { 0x2e4c, 0x2e4c, 0x2e4c, 0 }, 556 + { 0x31c0, 0x31c0, 0x31c0, 0 }, 557 + { 0x34f6, 0x34f6, 0x34f6, 0 }, 558 + { 0x37f9, 0x37f9, 0x37f9, 0 }, 559 + { 0x3acf, 0x3acf, 0x3acf, 0 }, 560 + { 0x3d80, 0x3d80, 0x3d80, 0 }, 561 + { 0x4010, 0x4010, 0x4010, 0 }, 562 + { 0x4284, 0x4284, 0x4284, 0 }, 563 + { 0x44dd, 0x44dd, 0x44dd, 0 }, 564 + { 0x4720, 0x4720, 0x4720, 0 }, 565 + { 0x494e, 0x494e, 0x494e, 0 }, 566 + { 0x4b69, 0x4b69, 0x4b69, 0 }, 567 + { 0x4d73, 0x4d73, 0x4d73, 0 }, 568 + { 0x4f6e, 0x4f6e, 0x4f6e, 0 }, 569 + { 0x5159, 0x5159, 0x5159, 0 }, 570 + { 0x5337, 0x5337, 0x5337, 0 }, 571 + { 0x5509, 0x5509, 0x5509, 0 }, 572 + { 0x56cf, 0x56cf, 0x56cf, 0 }, 573 + { 0x588a, 0x588a, 0x588a, 0 }, 574 + { 0x5a3b, 0x5a3b, 0x5a3b, 0 }, 575 + { 0x5be2, 0x5be2, 0x5be2, 0 }, 576 + { 0x5d80, 0x5d80, 0x5d80, 0 }, 577 + { 0x5f16, 0x5f16, 0x5f16, 0 }, 578 + { 0x60a4, 0x60a4, 0x60a4, 0 }, 579 + { 0x6229, 0x6229, 0x6229, 0 }, 580 + { 0x63a8, 0x63a8, 0x63a8, 0 }, 581 + { 0x6520, 0x6520, 0x6520, 0 }, 582 + { 0x6691, 0x6691, 0x6691, 0 }, 583 + { 0x67fc, 0x67fc, 0x67fc, 0 }, 584 + { 0x6961, 0x6961, 0x6961, 0 }, 585 + { 0x6ac0, 0x6ac0, 0x6ac0, 0 }, 586 + { 0x6c19, 0x6c19, 0x6c19, 0 }, 587 + { 0x6d6e, 0x6d6e, 0x6d6e, 0 }, 588 + { 0x6ebd, 0x6ebd, 0x6ebd, 0 }, 589 + { 0x7008, 0x7008, 0x7008, 0 }, 590 + { 0x714d, 0x714d, 0x714d, 0 }, 591 + { 0x728f, 0x728f, 0x728f, 0 }, 592 + { 0x73cc, 0x73cc, 0x73cc, 0 }, 593 + { 0x7504, 0x7504, 0x7504, 0 }, 594 + { 0x7639, 0x7639, 0x7639, 0 }, 595 + { 0x776a, 0x776a, 0x776a, 0 }, 596 + { 0x7897, 0x7897, 0x7897, 0 }, 597 + { 0x79c1, 0x79c1, 0x79c1, 0 }, 598 + { 0x7ae7, 0x7ae7, 0x7ae7, 0 }, 599 + { 0x7c09, 0x7c09, 0x7c09, 0 }, 600 + { 0x7d28, 0x7d28, 0x7d28, 0 }, 601 + { 0x7e44, 0x7e44, 0x7e44, 0 }, 602 + { 0x7f5d, 0x7f5d, 0x7f5d, 0 }, 603 + { 0x8073, 0x8073, 0x8073, 0 }, 604 + { 0x8186, 0x8186, 0x8186, 0 }, 605 + { 0x8296, 0x8296, 0x8296, 0 }, 606 + { 0x83a4, 0x83a4, 0x83a4, 0 }, 607 + { 0x84ae, 0x84ae, 0x84ae, 0 }, 608 + { 0x85b6, 0x85b6, 0x85b6, 0 }, 609 + { 0x86bc, 0x86bc, 0x86bc, 0 }, 610 + { 0x87bf, 0x87bf, 0x87bf, 0 }, 611 + { 0x88bf, 0x88bf, 0x88bf, 0 }, 612 + { 0x89be, 0x89be, 0x89be, 0 }, 613 + { 0x8ab9, 0x8ab9, 0x8ab9, 0 }, 614 + { 0x8bb3, 0x8bb3, 0x8bb3, 0 }, 615 + { 0x8cab, 0x8cab, 0x8cab, 0 }, 616 + { 0x8da0, 0x8da0, 0x8da0, 0 }, 617 + { 0x8e93, 0x8e93, 0x8e93, 0 }, 618 + { 0x8f84, 0x8f84, 0x8f84, 0 }, 619 + { 0x9073, 0x9073, 0x9073, 0 }, 620 + { 0x9161, 0x9161, 0x9161, 0 }, 621 + { 0x924c, 0x924c, 0x924c, 0 }, 622 + { 0x9335, 0x9335, 0x9335, 0 }, 623 + { 0x941d, 0x941d, 0x941d, 0 }, 624 + { 0x9503, 0x9503, 0x9503, 0 }, 625 + { 0x95e7, 0x95e7, 0x95e7, 0 }, 626 + { 0x96c9, 0x96c9, 0x96c9, 0 }, 627 + { 0x97aa, 0x97aa, 0x97aa, 0 }, 628 + { 0x9889, 0x9889, 0x9889, 0 }, 629 + { 0x9966, 0x9966, 0x9966, 0 }, 630 + { 0x9a42, 0x9a42, 0x9a42, 0 }, 631 + { 0x9b1c, 0x9b1c, 0x9b1c, 0 }, 632 + { 0x9bf5, 0x9bf5, 0x9bf5, 0 }, 633 + { 0x9ccc, 0x9ccc, 0x9ccc, 0 }, 634 + { 0x9da1, 0x9da1, 0x9da1, 0 }, 635 + { 0x9e76, 0x9e76, 0x9e76, 0 }, 636 + { 0x9f49, 0x9f49, 0x9f49, 0 }, 637 + { 0xa01a, 0xa01a, 0xa01a, 0 }, 638 + { 0xa0ea, 0xa0ea, 0xa0ea, 0 }, 639 + { 0xa1b9, 0xa1b9, 0xa1b9, 0 }, 640 + { 0xa286, 0xa286, 0xa286, 0 }, 641 + { 0xa352, 0xa352, 0xa352, 0 }, 642 + { 0xa41d, 0xa41d, 0xa41d, 0 }, 643 + { 0xa4e7, 0xa4e7, 0xa4e7, 0 }, 644 + { 0xa5af, 0xa5af, 0xa5af, 0 }, 645 + { 0xa676, 0xa676, 0xa676, 0 }, 646 + { 0xa73c, 0xa73c, 0xa73c, 0 }, 647 + { 0xa801, 0xa801, 0xa801, 0 }, 648 + { 0xa8c5, 0xa8c5, 0xa8c5, 0 }, 649 + { 0xa987, 0xa987, 0xa987, 0 }, 650 + { 0xaa48, 0xaa48, 0xaa48, 0 }, 651 + { 0xab09, 0xab09, 0xab09, 0 }, 652 + { 0xabc8, 0xabc8, 0xabc8, 0 }, 653 + { 0xac86, 0xac86, 0xac86, 0 }, 654 + { 0xad43, 0xad43, 0xad43, 0 }, 655 + { 0xadff, 0xadff, 0xadff, 0 }, 656 + { 0xaeba, 0xaeba, 0xaeba, 0 }, 657 + { 0xaf74, 0xaf74, 0xaf74, 0 }, 658 + { 0xb02d, 0xb02d, 0xb02d, 0 }, 659 + { 0xb0e5, 0xb0e5, 0xb0e5, 0 }, 660 + { 0xb19c, 0xb19c, 0xb19c, 0 }, 661 + { 0xb252, 0xb252, 0xb252, 0 }, 662 + { 0xb307, 0xb307, 0xb307, 0 }, 663 + { 0xb3bb, 0xb3bb, 0xb3bb, 0 }, 664 + { 0xb46f, 0xb46f, 0xb46f, 0 }, 665 + { 0xb521, 0xb521, 0xb521, 0 }, 666 + { 0xb5d3, 0xb5d3, 0xb5d3, 0 }, 667 + { 0xb683, 0xb683, 0xb683, 0 }, 668 + { 0xb733, 0xb733, 0xb733, 0 }, 669 + { 0xb7e2, 0xb7e2, 0xb7e2, 0 }, 670 + { 0xb890, 0xb890, 0xb890, 0 }, 671 + { 0xb93d, 0xb93d, 0xb93d, 0 }, 672 + { 0xb9ea, 0xb9ea, 0xb9ea, 0 }, 673 + { 0xba96, 0xba96, 0xba96, 0 }, 674 + { 0xbb40, 0xbb40, 0xbb40, 0 }, 675 + { 0xbbea, 0xbbea, 0xbbea, 0 }, 676 + { 0xbc94, 0xbc94, 0xbc94, 0 }, 677 + { 0xbd3c, 0xbd3c, 0xbd3c, 0 }, 678 + { 0xbde4, 0xbde4, 0xbde4, 0 }, 679 + { 0xbe8b, 0xbe8b, 0xbe8b, 0 }, 680 + { 0xbf31, 0xbf31, 0xbf31, 0 }, 681 + { 0xbfd7, 0xbfd7, 0xbfd7, 0 }, 682 + { 0xc07b, 0xc07b, 0xc07b, 0 }, 683 + { 0xc120, 0xc120, 0xc120, 0 }, 684 + { 0xc1c3, 0xc1c3, 0xc1c3, 0 }, 685 + { 0xc266, 0xc266, 0xc266, 0 }, 686 + { 0xc308, 0xc308, 0xc308, 0 }, 687 + { 0xc3a9, 0xc3a9, 0xc3a9, 0 }, 688 + { 0xc449, 0xc449, 0xc449, 0 }, 689 + { 0xc4e9, 0xc4e9, 0xc4e9, 0 }, 690 + { 0xc589, 0xc589, 0xc589, 0 }, 691 + { 0xc627, 0xc627, 0xc627, 0 }, 692 + { 0xc6c5, 0xc6c5, 0xc6c5, 0 }, 693 + { 0xc763, 0xc763, 0xc763, 0 }, 694 + { 0xc7ff, 0xc7ff, 0xc7ff, 0 }, 695 + { 0xc89b, 0xc89b, 0xc89b, 0 }, 696 + { 0xc937, 0xc937, 0xc937, 0 }, 697 + { 0xc9d2, 0xc9d2, 0xc9d2, 0 }, 698 + { 0xca6c, 0xca6c, 0xca6c, 0 }, 699 + { 0xcb06, 0xcb06, 0xcb06, 0 }, 700 + { 0xcb9f, 0xcb9f, 0xcb9f, 0 }, 701 + { 0xcc37, 0xcc37, 0xcc37, 0 }, 702 + { 0xcccf, 0xcccf, 0xcccf, 0 }, 703 + { 0xcd66, 0xcd66, 0xcd66, 0 }, 704 + { 0xcdfd, 0xcdfd, 0xcdfd, 0 }, 705 + { 0xce93, 0xce93, 0xce93, 0 }, 706 + { 0xcf29, 0xcf29, 0xcf29, 0 }, 707 + { 0xcfbe, 0xcfbe, 0xcfbe, 0 }, 708 + { 0xd053, 0xd053, 0xd053, 0 }, 709 + { 0xd0e7, 0xd0e7, 0xd0e7, 0 }, 710 + { 0xd17a, 0xd17a, 0xd17a, 0 }, 711 + { 0xd20d, 0xd20d, 0xd20d, 0 }, 712 + { 0xd2a0, 0xd2a0, 0xd2a0, 0 }, 713 + { 0xd331, 0xd331, 0xd331, 0 }, 714 + { 0xd3c3, 0xd3c3, 0xd3c3, 0 }, 715 + { 0xd454, 0xd454, 0xd454, 0 }, 716 + { 0xd4e4, 0xd4e4, 0xd4e4, 0 }, 717 + { 0xd574, 0xd574, 0xd574, 0 }, 718 + { 0xd603, 0xd603, 0xd603, 0 }, 719 + { 0xd692, 0xd692, 0xd692, 0 }, 720 + { 0xd720, 0xd720, 0xd720, 0 }, 721 + { 0xd7ae, 0xd7ae, 0xd7ae, 0 }, 722 + { 0xd83c, 0xd83c, 0xd83c, 0 }, 723 + { 0xd8c9, 0xd8c9, 0xd8c9, 0 }, 724 + { 0xd955, 0xd955, 0xd955, 0 }, 725 + { 0xd9e1, 0xd9e1, 0xd9e1, 0 }, 726 + { 0xda6d, 0xda6d, 0xda6d, 0 }, 727 + { 0xdaf8, 0xdaf8, 0xdaf8, 0 }, 728 + { 0xdb83, 0xdb83, 0xdb83, 0 }, 729 + { 0xdc0d, 0xdc0d, 0xdc0d, 0 }, 730 + { 0xdc97, 0xdc97, 0xdc97, 0 }, 731 + { 0xdd20, 0xdd20, 0xdd20, 0 }, 732 + { 0xdda9, 0xdda9, 0xdda9, 0 }, 733 + { 0xde31, 0xde31, 0xde31, 0 }, 734 + { 0xdeb9, 0xdeb9, 0xdeb9, 0 }, 735 + { 0xdf41, 0xdf41, 0xdf41, 0 }, 736 + { 0xdfc8, 0xdfc8, 0xdfc8, 0 }, 737 + { 0xe04f, 0xe04f, 0xe04f, 0 }, 738 + { 0xe0d5, 0xe0d5, 0xe0d5, 0 }, 739 + { 0xe15b, 0xe15b, 0xe15b, 0 }, 740 + { 0xe1e0, 0xe1e0, 0xe1e0, 0 }, 741 + { 0xe266, 0xe266, 0xe266, 0 }, 742 + { 0xe2ea, 0xe2ea, 0xe2ea, 0 }, 743 + { 0xe36f, 0xe36f, 0xe36f, 0 }, 744 + { 0xe3f3, 0xe3f3, 0xe3f3, 0 }, 745 + { 0xe476, 0xe476, 0xe476, 0 }, 746 + { 0xe4f9, 0xe4f9, 0xe4f9, 0 }, 747 + { 0xe57c, 0xe57c, 0xe57c, 0 }, 748 + { 0xe5fe, 0xe5fe, 0xe5fe, 0 }, 749 + { 0xe680, 0xe680, 0xe680, 0 }, 750 + { 0xe702, 0xe702, 0xe702, 0 }, 751 + { 0xe783, 0xe783, 0xe783, 0 }, 752 + { 0xe804, 0xe804, 0xe804, 0 }, 753 + { 0xe884, 0xe884, 0xe884, 0 }, 754 + { 0xe905, 0xe905, 0xe905, 0 }, 755 + { 0xe984, 0xe984, 0xe984, 0 }, 756 + { 0xea04, 0xea04, 0xea04, 0 }, 757 + { 0xea83, 0xea83, 0xea83, 0 }, 758 + { 0xeb02, 0xeb02, 0xeb02, 0 }, 759 + { 0xeb80, 0xeb80, 0xeb80, 0 }, 760 + { 0xebfe, 0xebfe, 0xebfe, 0 }, 761 + { 0xec7b, 0xec7b, 0xec7b, 0 }, 762 + { 0xecf9, 0xecf9, 0xecf9, 0 }, 763 + { 0xed76, 0xed76, 0xed76, 0 }, 764 + { 0xedf2, 0xedf2, 0xedf2, 0 }, 765 + { 0xee6f, 0xee6f, 0xee6f, 0 }, 766 + { 0xeeeb, 0xeeeb, 0xeeeb, 0 }, 767 + { 0xef66, 0xef66, 0xef66, 0 }, 768 + { 0xefe2, 0xefe2, 0xefe2, 0 }, 769 + { 0xf05d, 0xf05d, 0xf05d, 0 }, 770 + { 0xf0d7, 0xf0d7, 0xf0d7, 0 }, 771 + { 0xf152, 0xf152, 0xf152, 0 }, 772 + { 0xf1cc, 0xf1cc, 0xf1cc, 0 }, 773 + { 0xf245, 0xf245, 0xf245, 0 }, 774 + { 0xf2bf, 0xf2bf, 0xf2bf, 0 }, 775 + { 0xf338, 0xf338, 0xf338, 0 }, 776 + { 0xf3b0, 0xf3b0, 0xf3b0, 0 }, 777 + { 0xf429, 0xf429, 0xf429, 0 }, 778 + { 0xf4a1, 0xf4a1, 0xf4a1, 0 }, 779 + { 0xf519, 0xf519, 0xf519, 0 }, 780 + { 0xf590, 0xf590, 0xf590, 0 }, 781 + { 0xf608, 0xf608, 0xf608, 0 }, 782 + { 0xf67e, 0xf67e, 0xf67e, 0 }, 783 + { 0xf6f5, 0xf6f5, 0xf6f5, 0 }, 784 + { 0xf76b, 0xf76b, 0xf76b, 0 }, 785 + { 0xf7e1, 0xf7e1, 0xf7e1, 0 }, 786 + { 0xf857, 0xf857, 0xf857, 0 }, 787 + { 0xf8cd, 0xf8cd, 0xf8cd, 0 }, 788 + { 0xf942, 0xf942, 0xf942, 0 }, 789 + { 0xf9b7, 0xf9b7, 0xf9b7, 0 }, 790 + { 0xfa2b, 0xfa2b, 0xfa2b, 0 }, 791 + { 0xfaa0, 0xfaa0, 0xfaa0, 0 }, 792 + { 0xfb14, 0xfb14, 0xfb14, 0 }, 793 + { 0xfb88, 0xfb88, 0xfb88, 0 }, 794 + { 0xfbfb, 0xfbfb, 0xfbfb, 0 }, 795 + { 0xfc6e, 0xfc6e, 0xfc6e, 0 }, 796 + { 0xfce1, 0xfce1, 0xfce1, 0 }, 797 + { 0xfd54, 0xfd54, 0xfd54, 0 }, 798 + { 0xfdc6, 0xfdc6, 0xfdc6, 0 }, 799 + { 0xfe39, 0xfe39, 0xfe39, 0 }, 800 + { 0xfeaa, 0xfeaa, 0xfeaa, 0 }, 801 + { 0xff1c, 0xff1c, 0xff1c, 0 }, 802 + { 0xff8d, 0xff8d, 0xff8d, 0 }, 803 + { 0xffff, 0xffff, 0xffff, 0 }, 804 + }; 805 + 806 + const struct vkms_color_lut srgb_inv_eotf = { 807 + .base = srgb_inv_array, 808 + .lut_length = LUT_SIZE, 809 + .channel_value2index_ratio = 0xff00ffll 810 + }; 811 + EXPORT_SYMBOL(srgb_inv_eotf);
+12
drivers/gpu/drm/vkms/vkms_luts.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0+ */ 2 + 3 + #ifndef _VKMS_LUTS_H_ 4 + #define _VKMS_LUTS_H_ 5 + 6 + #define LUT_SIZE 256 7 + 8 + extern const struct vkms_color_lut linear_eotf; 9 + extern const struct vkms_color_lut srgb_eotf; 10 + extern const struct vkms_color_lut srgb_inv_eotf; 11 + 12 + #endif /* _VKMS_LUTS_H_ */
+2
drivers/gpu/drm/vkms/vkms_plane.c
··· 246 246 DRM_COLOR_YCBCR_BT601, 247 247 DRM_COLOR_YCBCR_FULL_RANGE); 248 248 249 + vkms_initialize_colorops(&plane->base); 250 + 249 251 return plane; 250 252 }