1 /* This file is autogenerated by u_format_srgb.py. Do not edit directly. */
2 
3 /**************************************************************************
4  *
5  * Copyright 2010 VMware, Inc.
6  * All Rights Reserved.
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the
10  * "Software"), to deal in the Software without restriction, including
11  * without limitation the rights to use, copy, modify, merge, publish,
12  * distribute, sub license, and/or sell copies of the Software, and to
13  * permit persons to whom the Software is furnished to do so, subject to
14  * the following conditions:
15  *
16  * The above copyright notice and this permission notice (including the
17  * next paragraph) shall be included in all copies or substantial portions
18  * of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
23  * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
24  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27  *
28  **************************************************************************/
29 
30 /**
31  * @file
32  * SRGB translation.
33  *
34  * @author Brian Paul <brianp@vmware.com>
35  * @author Michal Krol <michal@vmware.com>
36  * @author Jose Fonseca <jfonseca@vmware.com>
37  */
38 
39 #include "format_srgb.h"
40 
41 const float
42 util_format_srgb_8unorm_to_linear_float_table[256] = {
43     0.0000000e+00f, 3.0352698e-04f, 6.0705397e-04f, 9.1058095e-04f,
44     1.2141079e-03f, 1.5176349e-03f, 1.8211619e-03f, 2.1246889e-03f,
45     2.4282159e-03f, 2.7317429e-03f, 3.0352698e-03f, 3.3465358e-03f,
46     3.6765073e-03f, 4.0247170e-03f, 4.3914420e-03f, 4.7769535e-03f,
47     5.1815167e-03f, 5.6053916e-03f, 6.0488330e-03f, 6.5120908e-03f,
48     6.9954102e-03f, 7.4990320e-03f, 8.0231930e-03f, 8.5681256e-03f,
49     9.1340587e-03f, 9.7212173e-03f, 1.0329823e-02f, 1.0960094e-02f,
50     1.1612245e-02f, 1.2286488e-02f, 1.2983032e-02f, 1.3702083e-02f,
51     1.4443844e-02f, 1.5208514e-02f, 1.5996293e-02f, 1.6807376e-02f,
52     1.7641954e-02f, 1.8500220e-02f, 1.9382361e-02f, 2.0288563e-02f,
53     2.1219010e-02f, 2.2173885e-02f, 2.3153366e-02f, 2.4157632e-02f,
54     2.5186860e-02f, 2.6241222e-02f, 2.7320892e-02f, 2.8426040e-02f,
55     2.9556834e-02f, 3.0713444e-02f, 3.1896033e-02f, 3.3104767e-02f,
56     3.4339807e-02f, 3.5601315e-02f, 3.6889450e-02f, 3.8204372e-02f,
57     3.9546235e-02f, 4.0915197e-02f, 4.2311411e-02f, 4.3735029e-02f,
58     4.5186204e-02f, 4.6665086e-02f, 4.8171824e-02f, 4.9706566e-02f,
59     5.1269458e-02f, 5.2860647e-02f, 5.4480276e-02f, 5.6128490e-02f,
60     5.7805430e-02f, 5.9511238e-02f, 6.1246054e-02f, 6.3010018e-02f,
61     6.4803267e-02f, 6.6625939e-02f, 6.8478170e-02f, 7.0360096e-02f,
62     7.2271851e-02f, 7.4213568e-02f, 7.6185381e-02f, 7.8187422e-02f,
63     8.0219820e-02f, 8.2282707e-02f, 8.4376212e-02f, 8.6500462e-02f,
64     8.8655586e-02f, 9.0841711e-02f, 9.3058963e-02f, 9.5307467e-02f,
65     9.7587347e-02f, 9.9898728e-02f, 1.0224173e-01f, 1.0461648e-01f,
66     1.0702310e-01f, 1.0946171e-01f, 1.1193243e-01f, 1.1443537e-01f,
67     1.1697067e-01f, 1.1953843e-01f, 1.2213877e-01f, 1.2477182e-01f,
68     1.2743768e-01f, 1.3013648e-01f, 1.3286832e-01f, 1.3563333e-01f,
69     1.3843162e-01f, 1.4126329e-01f, 1.4412847e-01f, 1.4702727e-01f,
70     1.4995979e-01f, 1.5292615e-01f, 1.5592646e-01f, 1.5896084e-01f,
71     1.6202938e-01f, 1.6513219e-01f, 1.6826940e-01f, 1.7144110e-01f,
72     1.7464740e-01f, 1.7788842e-01f, 1.8116424e-01f, 1.8447499e-01f,
73     1.8782077e-01f, 1.9120168e-01f, 1.9461783e-01f, 1.9806932e-01f,
74     2.0155625e-01f, 2.0507874e-01f, 2.0863687e-01f, 2.1223076e-01f,
75     2.1586050e-01f, 2.1952620e-01f, 2.2322796e-01f, 2.2696587e-01f,
76     2.3074005e-01f, 2.3455058e-01f, 2.3839757e-01f, 2.4228112e-01f,
77     2.4620133e-01f, 2.5015828e-01f, 2.5415209e-01f, 2.5818285e-01f,
78     2.6225066e-01f, 2.6635560e-01f, 2.7049779e-01f, 2.7467731e-01f,
79     2.7889426e-01f, 2.8314874e-01f, 2.8744084e-01f, 2.9177065e-01f,
80     2.9613827e-01f, 3.0054379e-01f, 3.0498731e-01f, 3.0946892e-01f,
81     3.1398871e-01f, 3.1854678e-01f, 3.2314321e-01f, 3.2777810e-01f,
82     3.3245154e-01f, 3.3716362e-01f, 3.4191442e-01f, 3.4670406e-01f,
83     3.5153260e-01f, 3.5640014e-01f, 3.6130678e-01f, 3.6625260e-01f,
84     3.7123768e-01f, 3.7626212e-01f, 3.8132601e-01f, 3.8642943e-01f,
85     3.9157248e-01f, 3.9675523e-01f, 4.0197778e-01f, 4.0724021e-01f,
86     4.1254261e-01f, 4.1788507e-01f, 4.2326767e-01f, 4.2869050e-01f,
87     4.3415364e-01f, 4.3965717e-01f, 4.4520119e-01f, 4.5078578e-01f,
88     4.5641102e-01f, 4.6207700e-01f, 4.6778380e-01f, 4.7353150e-01f,
89     4.7932018e-01f, 4.8514994e-01f, 4.9102085e-01f, 4.9693300e-01f,
90     5.0288646e-01f, 5.0888132e-01f, 5.1491767e-01f, 5.2099557e-01f,
91     5.2711513e-01f, 5.3327640e-01f, 5.3947949e-01f, 5.4572446e-01f,
92     5.5201140e-01f, 5.5834039e-01f, 5.6471151e-01f, 5.7112483e-01f,
93     5.7758044e-01f, 5.8407842e-01f, 5.9061884e-01f, 5.9720179e-01f,
94     6.0382734e-01f, 6.1049557e-01f, 6.1720656e-01f, 6.2396039e-01f,
95     6.3075714e-01f, 6.3759687e-01f, 6.4447968e-01f, 6.5140564e-01f,
96     6.5837482e-01f, 6.6538730e-01f, 6.7244316e-01f, 6.7954247e-01f,
97     6.8668531e-01f, 6.9387176e-01f, 7.0110189e-01f, 7.0837578e-01f,
98     7.1569350e-01f, 7.2305513e-01f, 7.3046074e-01f, 7.3791041e-01f,
99     7.4540421e-01f, 7.5294222e-01f, 7.6052450e-01f, 7.6815115e-01f,
100     7.7582222e-01f, 7.8353779e-01f, 7.9129794e-01f, 7.9910274e-01f,
101     8.0695226e-01f, 8.1484657e-01f, 8.2278575e-01f, 8.3076988e-01f,
102     8.3879901e-01f, 8.4687323e-01f, 8.5499261e-01f, 8.6315721e-01f,
103     8.7136712e-01f, 8.7962240e-01f, 8.8792312e-01f, 8.9626935e-01f,
104     9.0466117e-01f, 9.1309865e-01f, 9.2158186e-01f, 9.3011086e-01f,
105     9.3868573e-01f, 9.4730654e-01f, 9.5597335e-01f, 9.6468625e-01f,
106     9.7344529e-01f, 9.8225055e-01f, 9.9110210e-01f, 1.0000000e+00f,
107 };
108 
109 const uint8_t
110 util_format_srgb_to_linear_8unorm_table[256] = {
111       0,   0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,
112       1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,
113       4,   4,   4,   4,   4,   5,   5,   5,   5,   6,   6,   6,   6,   7,   7,   7,
114       8,   8,   8,   8,   9,   9,   9,  10,  10,  10,  11,  11,  12,  12,  12,  13,
115      13,  13,  14,  14,  15,  15,  16,  16,  17,  17,  17,  18,  18,  19,  19,  20,
116      20,  21,  22,  22,  23,  23,  24,  24,  25,  25,  26,  27,  27,  28,  29,  29,
117      30,  30,  31,  32,  32,  33,  34,  35,  35,  36,  37,  37,  38,  39,  40,  41,
118      41,  42,  43,  44,  45,  45,  46,  47,  48,  49,  50,  51,  51,  52,  53,  54,
119      55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,
120      71,  72,  73,  74,  76,  77,  78,  79,  80,  81,  82,  84,  85,  86,  87,  88,
121      90,  91,  92,  93,  95,  96,  97,  99, 100, 101, 103, 104, 105, 107, 108, 109,
122     111, 112, 114, 115, 116, 118, 119, 121, 122, 124, 125, 127, 128, 130, 131, 133,
123     134, 136, 138, 139, 141, 142, 144, 146, 147, 149, 151, 152, 154, 156, 157, 159,
124     161, 163, 164, 166, 168, 170, 171, 173, 175, 177, 179, 181, 183, 184, 186, 188,
125     190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220,
126     222, 224, 226, 229, 231, 233, 235, 237, 239, 242, 244, 246, 248, 250, 253, 255,
127 };
128 
129 const uint8_t
130 util_format_linear_to_srgb_8unorm_table[256] = {
131       0,  13,  22,  28,  34,  38,  42,  46,  50,  53,  56,  59,  61,  64,  66,  69,
132      71,  73,  75,  77,  79,  81,  83,  85,  86,  88,  90,  92,  93,  95,  96,  98,
133      99, 101, 102, 104, 105, 106, 108, 109, 110, 112, 113, 114, 115, 117, 118, 119,
134     120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
135     137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 148, 149, 150, 151,
136     152, 153, 154, 155, 155, 156, 157, 158, 159, 159, 160, 161, 162, 163, 163, 164,
137     165, 166, 167, 167, 168, 169, 170, 170, 171, 172, 173, 173, 174, 175, 175, 176,
138     177, 178, 178, 179, 180, 180, 181, 182, 182, 183, 184, 185, 185, 186, 187, 187,
139     188, 189, 189, 190, 190, 191, 192, 192, 193, 194, 194, 195, 196, 196, 197, 197,
140     198, 199, 199, 200, 200, 201, 202, 202, 203, 203, 204, 205, 205, 206, 206, 207,
141     208, 208, 209, 209, 210, 210, 211, 212, 212, 213, 213, 214, 214, 215, 215, 216,
142     216, 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, 224,
143     225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 233,
144     233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 238, 239, 239, 240, 240,
145     241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 246, 247, 247, 248,
146     248, 249, 249, 250, 250, 251, 251, 251, 252, 252, 253, 253, 254, 254, 255, 255,
147 };
148 
149 const unsigned
150 util_format_linear_to_srgb_helper_table[104] = {
151     0x0073000d, 0x007a000d, 0x0080000d, 0x0087000d,
152     0x008d000d, 0x0094000d, 0x009a000d, 0x00a1000d,
153     0x00a7001a, 0x00b4001a, 0x00c1001a, 0x00ce001a,
154     0x00da001a, 0x00e7001a, 0x00f4001a, 0x0101001a,
155     0x010e0033, 0x01280033, 0x01410033, 0x015b0033,
156     0x01750033, 0x018f0033, 0x01a80033, 0x01c20033,
157     0x01dc0067, 0x020f0067, 0x02430067, 0x02760067,
158     0x02aa0067, 0x02dd0067, 0x03110067, 0x03440067,
159     0x037800ce, 0x03df00ce, 0x044600ce, 0x04ad00ce,
160     0x051400ce, 0x057b00c5, 0x05dd00bc, 0x063b00b5,
161     0x06970158, 0x07420142, 0x07e30130, 0x087b0120,
162     0x090b0112, 0x09940106, 0x0a1700fc, 0x0a9500f2,
163     0x0b0f01cb, 0x0bf401ae, 0x0ccb0195, 0x0d950180,
164     0x0e56016e, 0x0f0d015e, 0x0fbc0150, 0x10630143,
165     0x11070264, 0x1238023e, 0x1357021d, 0x14660201,
166     0x156601e9, 0x165a01d3, 0x174401c0, 0x182401af,
167     0x18fe0331, 0x1a9602fe, 0x1c1502d2, 0x1d7e02ad,
168     0x1ed4028d, 0x201a0270, 0x21520256, 0x227d0240,
169     0x239f0443, 0x25c003fe, 0x27bf03c4, 0x29a10392,
170     0x2b6a0367, 0x2d1d0341, 0x2ebe031f, 0x304d0300,
171     0x31d105b0, 0x34a80555, 0x37520507, 0x39d504c5,
172     0x3c37048b, 0x3e7c0458, 0x40a8042a, 0x42bd0401,
173     0x44c20798, 0x488e071e, 0x4c1c06b6, 0x4f76065d,
174     0x52a50610, 0x55ac05cc, 0x5892058f, 0x5b590559,
175     0x5e0c0a23, 0x631c0980, 0x67db08f6, 0x6c55087f,
176     0x70940818, 0x74a007bd, 0x787d076c, 0x7c330723,
177 };
178 
179