blob: 4909349021c077e981c0e3e578b28b87e5ceac58 [file] [log] [blame]
Chia-I Wub5a1add2014-08-16 12:46:32 +08001/*
Chia-I Wu44e42362014-09-02 08:32:09 +08002 * XGL
Chia-I Wub5a1add2014-08-16 12:46:32 +08003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 *
24 * Authors:
25 * Chia-I Wu <olv@lunarg.com>
26 */
27
Chia-I Wu92096a92014-12-21 23:07:08 +080028#include <string.h> /* for memcpy */
29#include "icd-utils.h"
Chia-I Wub5a1add2014-08-16 12:46:32 +080030#include "icd-format.h"
31
32static const struct icd_format_info {
Mark Lobodzinskie2d07a52015-01-29 08:55:56 -060033 size_t size;
34 uint32_t channel_count;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -070035} icd_format_table[XGL_NUM_FMT] = {
36 [XGL_FMT_UNDEFINED] = { 0, 0 },
37 [XGL_FMT_R4G4_UNORM] = { 1, 2 },
38 [XGL_FMT_R4G4_USCALED] = { 1, 2 },
39 [XGL_FMT_R4G4B4A4_UNORM] = { 2, 4 },
40 [XGL_FMT_R4G4B4A4_USCALED] = { 2, 4 },
41 [XGL_FMT_R5G6B5_UNORM] = { 2, 3 },
42 [XGL_FMT_R5G6B5_USCALED] = { 2, 3 },
43 [XGL_FMT_R5G5B5A1_UNORM] = { 2, 4 },
44 [XGL_FMT_R5G5B5A1_USCALED] = { 2, 4 },
45 [XGL_FMT_R8_UNORM] = { 1, 1 },
46 [XGL_FMT_R8_SNORM] = { 1, 1 },
47 [XGL_FMT_R8_USCALED] = { 1, 1 },
48 [XGL_FMT_R8_SSCALED] = { 1, 1 },
49 [XGL_FMT_R8_UINT] = { 1, 1 },
50 [XGL_FMT_R8_SINT] = { 1, 1 },
51 [XGL_FMT_R8_SRGB] = { 1, 1 },
52 [XGL_FMT_R8G8_UNORM] = { 2, 2 },
53 [XGL_FMT_R8G8_SNORM] = { 2, 2 },
54 [XGL_FMT_R8G8_USCALED] = { 2, 2 },
55 [XGL_FMT_R8G8_SSCALED] = { 2, 2 },
56 [XGL_FMT_R8G8_UINT] = { 2, 2 },
57 [XGL_FMT_R8G8_SINT] = { 2, 2 },
58 [XGL_FMT_R8G8_SRGB] = { 2, 2 },
59 [XGL_FMT_R8G8B8_UNORM] = { 3, 3 },
60 [XGL_FMT_R8G8B8_SNORM] = { 3, 3 },
61 [XGL_FMT_R8G8B8_USCALED] = { 3, 3 },
62 [XGL_FMT_R8G8B8_SSCALED] = { 3, 3 },
63 [XGL_FMT_R8G8B8_UINT] = { 3, 3 },
64 [XGL_FMT_R8G8B8_SINT] = { 3, 3 },
65 [XGL_FMT_R8G8B8_SRGB] = { 3, 3 },
66 [XGL_FMT_R8G8B8A8_UNORM] = { 4, 4 },
67 [XGL_FMT_R8G8B8A8_SNORM] = { 4, 4 },
68 [XGL_FMT_R8G8B8A8_USCALED] = { 4, 4 },
69 [XGL_FMT_R8G8B8A8_SSCALED] = { 4, 4 },
70 [XGL_FMT_R8G8B8A8_UINT] = { 4, 4 },
71 [XGL_FMT_R8G8B8A8_SINT] = { 4, 4 },
72 [XGL_FMT_R8G8B8A8_SRGB] = { 4, 4 },
73 [XGL_FMT_R10G10B10A2_UNORM] = { 4, 4 },
74 [XGL_FMT_R10G10B10A2_SNORM] = { 4, 4 },
75 [XGL_FMT_R10G10B10A2_USCALED] = { 4, 4 },
76 [XGL_FMT_R10G10B10A2_SSCALED] = { 4, 4 },
77 [XGL_FMT_R10G10B10A2_UINT] = { 4, 4 },
78 [XGL_FMT_R10G10B10A2_SINT] = { 4, 4 },
79 [XGL_FMT_R16_UNORM] = { 2, 1 },
80 [XGL_FMT_R16_SNORM] = { 2, 1 },
81 [XGL_FMT_R16_USCALED] = { 2, 1 },
82 [XGL_FMT_R16_SSCALED] = { 2, 1 },
83 [XGL_FMT_R16_UINT] = { 2, 1 },
84 [XGL_FMT_R16_SINT] = { 2, 1 },
85 [XGL_FMT_R16_SFLOAT] = { 2, 1 },
86 [XGL_FMT_R16G16_UNORM] = { 4, 2 },
87 [XGL_FMT_R16G16_SNORM] = { 4, 2 },
88 [XGL_FMT_R16G16_USCALED] = { 4, 2 },
89 [XGL_FMT_R16G16_SSCALED] = { 4, 2 },
90 [XGL_FMT_R16G16_UINT] = { 4, 2 },
91 [XGL_FMT_R16G16_SINT] = { 4, 2 },
92 [XGL_FMT_R16G16_SFLOAT] = { 4, 2 },
93 [XGL_FMT_R16G16B16_UNORM] = { 6, 3 },
94 [XGL_FMT_R16G16B16_SNORM] = { 6, 3 },
95 [XGL_FMT_R16G16B16_USCALED] = { 6, 3 },
96 [XGL_FMT_R16G16B16_SSCALED] = { 6, 3 },
97 [XGL_FMT_R16G16B16_UINT] = { 6, 3 },
98 [XGL_FMT_R16G16B16_SINT] = { 6, 3 },
99 [XGL_FMT_R16G16B16_SFLOAT] = { 6, 3 },
100 [XGL_FMT_R16G16B16A16_UNORM] = { 8, 4 },
101 [XGL_FMT_R16G16B16A16_SNORM] = { 8, 4 },
102 [XGL_FMT_R16G16B16A16_USCALED] = { 8, 4 },
103 [XGL_FMT_R16G16B16A16_SSCALED] = { 8, 4 },
104 [XGL_FMT_R16G16B16A16_UINT] = { 8, 4 },
105 [XGL_FMT_R16G16B16A16_SINT] = { 8, 4 },
106 [XGL_FMT_R16G16B16A16_SFLOAT] = { 8, 4 },
107 [XGL_FMT_R32_UINT] = { 4, 1 },
108 [XGL_FMT_R32_SINT] = { 4, 1 },
109 [XGL_FMT_R32_SFLOAT] = { 4, 1 },
110 [XGL_FMT_R32G32_UINT] = { 8, 2 },
111 [XGL_FMT_R32G32_SINT] = { 8, 2 },
112 [XGL_FMT_R32G32_SFLOAT] = { 8, 2 },
113 [XGL_FMT_R32G32B32_UINT] = { 12, 3 },
114 [XGL_FMT_R32G32B32_SINT] = { 12, 3 },
115 [XGL_FMT_R32G32B32_SFLOAT] = { 12, 3 },
116 [XGL_FMT_R32G32B32A32_UINT] = { 16, 4 },
117 [XGL_FMT_R32G32B32A32_SINT] = { 16, 4 },
118 [XGL_FMT_R32G32B32A32_SFLOAT] = { 16, 4 },
119 [XGL_FMT_R64_SFLOAT] = { 8, 1 },
120 [XGL_FMT_R64G64_SFLOAT] = { 16, 2 },
121 [XGL_FMT_R64G64B64_SFLOAT] = { 24, 3 },
122 [XGL_FMT_R64G64B64A64_SFLOAT] = { 32, 4 },
123 [XGL_FMT_R11G11B10_UFLOAT] = { 4, 3 },
124 [XGL_FMT_R9G9B9E5_UFLOAT] = { 4, 3 },
125 [XGL_FMT_D16_UNORM] = { 2, 1 },
126 [XGL_FMT_D24_UNORM] = { 3, 1 },
127 [XGL_FMT_D32_SFLOAT] = { 4, 1 },
128 [XGL_FMT_S8_UINT] = { 1, 1 },
129 [XGL_FMT_D16_UNORM_S8_UINT] = { 3, 2 },
130 [XGL_FMT_D24_UNORM_S8_UINT] = { 4, 2 },
131 [XGL_FMT_D32_SFLOAT_S8_UINT] = { 4, 2 },
Courtney Goeltzenleuchterfe8a2e12015-03-03 11:30:36 -0700132 [XGL_FMT_BC1_RGB_UNORM] = { 8, 4 },
133 [XGL_FMT_BC1_RGB_SRGB] = { 8, 4 },
134 [XGL_FMT_BC1_RGBA_UNORM] = { 8, 4 },
135 [XGL_FMT_BC1_RGBA_SRGB] = { 8, 4 },
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700136 [XGL_FMT_BC2_UNORM] = { 16, 4 },
137 [XGL_FMT_BC2_SRGB] = { 16, 4 },
138 [XGL_FMT_BC3_UNORM] = { 16, 4 },
139 [XGL_FMT_BC3_SRGB] = { 16, 4 },
140 [XGL_FMT_BC4_UNORM] = { 8, 4 },
141 [XGL_FMT_BC4_SNORM] = { 8, 4 },
142 [XGL_FMT_BC5_UNORM] = { 16, 4 },
143 [XGL_FMT_BC5_SNORM] = { 16, 4 },
144 [XGL_FMT_BC6H_UFLOAT] = { 16, 4 },
145 [XGL_FMT_BC6H_SFLOAT] = { 16, 4 },
146 [XGL_FMT_BC7_UNORM] = { 16, 4 },
147 [XGL_FMT_BC7_SRGB] = { 16, 4 },
148 /* TODO: Initialize remaining compressed formats. */
149 [XGL_FMT_ETC2_R8G8B8_UNORM] = { 0, 0 },
150 [XGL_FMT_ETC2_R8G8B8A1_UNORM] = { 0, 0 },
151 [XGL_FMT_ETC2_R8G8B8A8_UNORM] = { 0, 0 },
152 [XGL_FMT_EAC_R11_UNORM] = { 0, 0 },
153 [XGL_FMT_EAC_R11_SNORM] = { 0, 0 },
154 [XGL_FMT_EAC_R11G11_UNORM] = { 0, 0 },
155 [XGL_FMT_EAC_R11G11_SNORM] = { 0, 0 },
156 [XGL_FMT_ASTC_4x4_UNORM] = { 0, 0 },
157 [XGL_FMT_ASTC_4x4_SRGB] = { 0, 0 },
Courtney Goeltzenleuchterfe8a2e12015-03-03 11:30:36 -0700158 [XGL_FMT_ASTC_5x4_UNORM] = { 0, 0 },
159 [XGL_FMT_ASTC_5x4_SRGB] = { 0, 0 },
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700160 [XGL_FMT_ASTC_5x5_UNORM] = { 0, 0 },
161 [XGL_FMT_ASTC_5x5_SRGB] = { 0, 0 },
162 [XGL_FMT_ASTC_6x5_UNORM] = { 0, 0 },
163 [XGL_FMT_ASTC_6x5_SRGB] = { 0, 0 },
164 [XGL_FMT_ASTC_6x6_UNORM] = { 0, 0 },
165 [XGL_FMT_ASTC_6x6_SRGB] = { 0, 0 },
166 [XGL_FMT_ASTC_8x5_UNORM] = { 0, 0 },
167 [XGL_FMT_ASTC_8x5_SRGB] = { 0, 0 },
168 [XGL_FMT_ASTC_8x6_UNORM] = { 0, 0 },
169 [XGL_FMT_ASTC_8x6_SRGB] = { 0, 0 },
170 [XGL_FMT_ASTC_8x8_UNORM] = { 0, 0 },
171 [XGL_FMT_ASTC_8x8_SRGB] = { 0, 0 },
172 [XGL_FMT_ASTC_10x5_UNORM] = { 0, 0 },
173 [XGL_FMT_ASTC_10x5_SRGB] = { 0, 0 },
174 [XGL_FMT_ASTC_10x6_UNORM] = { 0, 0 },
175 [XGL_FMT_ASTC_10x6_SRGB] = { 0, 0 },
176 [XGL_FMT_ASTC_10x8_UNORM] = { 0, 0 },
177 [XGL_FMT_ASTC_10x8_SRGB] = { 0, 0 },
178 [XGL_FMT_ASTC_10x10_UNORM] = { 0, 0 },
179 [XGL_FMT_ASTC_10x10_SRGB] = { 0, 0 },
180 [XGL_FMT_ASTC_12x10_UNORM] = { 0, 0 },
181 [XGL_FMT_ASTC_12x10_SRGB] = { 0, 0 },
182 [XGL_FMT_ASTC_12x12_UNORM] = { 0, 0 },
183 [XGL_FMT_ASTC_12x12_SRGB] = { 0, 0 },
184 [XGL_FMT_B5G6R5_UNORM] = { 2, 3 },
185 [XGL_FMT_B5G6R5_USCALED] = { 2, 3 },
186 [XGL_FMT_B8G8R8_UNORM] = { 3, 3 },
187 [XGL_FMT_B8G8R8_SNORM] = { 3, 3 },
188 [XGL_FMT_B8G8R8_USCALED] = { 3, 3 },
189 [XGL_FMT_B8G8R8_SSCALED] = { 3, 3 },
190 [XGL_FMT_B8G8R8_UINT] = { 3, 3 },
191 [XGL_FMT_B8G8R8_SINT] = { 3, 3 },
192 [XGL_FMT_B8G8R8_SRGB] = { 3, 3 },
193 [XGL_FMT_B8G8R8A8_UNORM] = { 4, 4 },
194 [XGL_FMT_B8G8R8A8_SNORM] = { 4, 4 },
195 [XGL_FMT_B8G8R8A8_USCALED] = { 4, 4 },
196 [XGL_FMT_B8G8R8A8_SSCALED] = { 4, 4 },
197 [XGL_FMT_B8G8R8A8_UINT] = { 4, 4 },
198 [XGL_FMT_B8G8R8A8_SINT] = { 4, 4 },
199 [XGL_FMT_B8G8R8A8_SRGB] = { 4, 4 },
200 [XGL_FMT_B10G10R10A2_UNORM] = { 4, 4 },
201 [XGL_FMT_B10G10R10A2_SNORM] = { 4, 4 },
202 [XGL_FMT_B10G10R10A2_USCALED] = { 4, 4 },
203 [XGL_FMT_B10G10R10A2_SSCALED] = { 4, 4 },
204 [XGL_FMT_B10G10R10A2_UINT] = { 4, 4 },
205 [XGL_FMT_B10G10R10A2_SINT] = { 4, 4 },
Chia-I Wub5a1add2014-08-16 12:46:32 +0800206};
207
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700208bool icd_format_is_ds(XGL_FORMAT format)
209{
210 bool is_ds = false;
211
212 switch (format) {
213 case XGL_FMT_D16_UNORM:
214 case XGL_FMT_D24_UNORM:
215 case XGL_FMT_D32_SFLOAT:
216 case XGL_FMT_S8_UINT:
217 case XGL_FMT_D16_UNORM_S8_UINT:
218 case XGL_FMT_D24_UNORM_S8_UINT:
219 case XGL_FMT_D32_SFLOAT_S8_UINT:
220 is_ds = true;
221 break;
222 default:
223 break;
224 }
225
226 return is_ds;
227}
228
229bool icd_format_is_norm(XGL_FORMAT format)
230{
231 bool is_norm = false;
232
233 switch (format) {
234 case XGL_FMT_R4G4_UNORM:
235 case XGL_FMT_R4G4B4A4_UNORM:
236 case XGL_FMT_R5G6B5_UNORM:
237 case XGL_FMT_R5G5B5A1_UNORM:
238 case XGL_FMT_R8_UNORM:
239 case XGL_FMT_R8_SNORM:
240 case XGL_FMT_R8G8_UNORM:
241 case XGL_FMT_R8G8_SNORM:
242 case XGL_FMT_R8G8B8_UNORM:
243 case XGL_FMT_R8G8B8_SNORM:
244 case XGL_FMT_R8G8B8A8_UNORM:
245 case XGL_FMT_R8G8B8A8_SNORM:
246 case XGL_FMT_R10G10B10A2_UNORM:
247 case XGL_FMT_R10G10B10A2_SNORM:
248 case XGL_FMT_R16_UNORM:
249 case XGL_FMT_R16_SNORM:
250 case XGL_FMT_R16G16_UNORM:
251 case XGL_FMT_R16G16_SNORM:
252 case XGL_FMT_R16G16B16_UNORM:
253 case XGL_FMT_R16G16B16_SNORM:
254 case XGL_FMT_R16G16B16A16_UNORM:
255 case XGL_FMT_R16G16B16A16_SNORM:
Courtney Goeltzenleuchterfe8a2e12015-03-03 11:30:36 -0700256 case XGL_FMT_BC1_RGB_UNORM:
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700257 case XGL_FMT_BC2_UNORM:
258 case XGL_FMT_BC3_UNORM:
259 case XGL_FMT_BC4_UNORM:
260 case XGL_FMT_BC4_SNORM:
261 case XGL_FMT_BC5_UNORM:
262 case XGL_FMT_BC5_SNORM:
263 case XGL_FMT_BC7_UNORM:
264 case XGL_FMT_ETC2_R8G8B8_UNORM:
265 case XGL_FMT_ETC2_R8G8B8A1_UNORM:
266 case XGL_FMT_ETC2_R8G8B8A8_UNORM:
267 case XGL_FMT_EAC_R11_UNORM:
268 case XGL_FMT_EAC_R11_SNORM:
269 case XGL_FMT_EAC_R11G11_UNORM:
270 case XGL_FMT_EAC_R11G11_SNORM:
271 case XGL_FMT_ASTC_4x4_UNORM:
Courtney Goeltzenleuchterfe8a2e12015-03-03 11:30:36 -0700272 case XGL_FMT_ASTC_5x4_UNORM:
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700273 case XGL_FMT_ASTC_5x5_UNORM:
274 case XGL_FMT_ASTC_6x5_UNORM:
275 case XGL_FMT_ASTC_6x6_UNORM:
276 case XGL_FMT_ASTC_8x5_UNORM:
277 case XGL_FMT_ASTC_8x6_UNORM:
278 case XGL_FMT_ASTC_8x8_UNORM:
279 case XGL_FMT_ASTC_10x5_UNORM:
280 case XGL_FMT_ASTC_10x6_UNORM:
281 case XGL_FMT_ASTC_10x8_UNORM:
282 case XGL_FMT_ASTC_10x10_UNORM:
283 case XGL_FMT_ASTC_12x10_UNORM:
284 case XGL_FMT_ASTC_12x12_UNORM:
285 case XGL_FMT_B5G6R5_UNORM:
286 case XGL_FMT_B8G8R8_UNORM:
287 case XGL_FMT_B8G8R8_SNORM:
288 case XGL_FMT_B8G8R8A8_UNORM:
289 case XGL_FMT_B8G8R8A8_SNORM:
290 case XGL_FMT_B10G10R10A2_UNORM:
291 case XGL_FMT_B10G10R10A2_SNORM:
292 is_norm = true;
293 break;
294 default:
295 break;
296 }
297
298 return is_norm;
299};
300
301bool icd_format_is_int(XGL_FORMAT format)
302{
303 bool is_int = false;
304
305 switch (format) {
306 case XGL_FMT_R8_UINT:
307 case XGL_FMT_R8_SINT:
308 case XGL_FMT_R8G8_UINT:
309 case XGL_FMT_R8G8_SINT:
310 case XGL_FMT_R8G8B8_UINT:
311 case XGL_FMT_R8G8B8_SINT:
312 case XGL_FMT_R8G8B8A8_UINT:
313 case XGL_FMT_R8G8B8A8_SINT:
314 case XGL_FMT_R10G10B10A2_UINT:
315 case XGL_FMT_R10G10B10A2_SINT:
316 case XGL_FMT_R16_UINT:
317 case XGL_FMT_R16_SINT:
318 case XGL_FMT_R16G16_UINT:
319 case XGL_FMT_R16G16_SINT:
320 case XGL_FMT_R16G16B16_UINT:
321 case XGL_FMT_R16G16B16_SINT:
322 case XGL_FMT_R16G16B16A16_UINT:
323 case XGL_FMT_R16G16B16A16_SINT:
324 case XGL_FMT_R32_UINT:
325 case XGL_FMT_R32_SINT:
326 case XGL_FMT_R32G32_UINT:
327 case XGL_FMT_R32G32_SINT:
328 case XGL_FMT_R32G32B32_UINT:
329 case XGL_FMT_R32G32B32_SINT:
330 case XGL_FMT_R32G32B32A32_UINT:
331 case XGL_FMT_R32G32B32A32_SINT:
332 case XGL_FMT_B8G8R8_UINT:
333 case XGL_FMT_B8G8R8_SINT:
334 case XGL_FMT_B8G8R8A8_UINT:
335 case XGL_FMT_B8G8R8A8_SINT:
336 case XGL_FMT_B10G10R10A2_UINT:
337 case XGL_FMT_B10G10R10A2_SINT:
338 is_int = true;
339 break;
340 default:
341 break;
342 }
343
344 return is_int;
345}
346
347bool icd_format_is_float(XGL_FORMAT format)
348{
349 bool is_float = false;
350
351 switch (format) {
352 case XGL_FMT_R16_SFLOAT:
353 case XGL_FMT_R16G16_SFLOAT:
354 case XGL_FMT_R16G16B16_SFLOAT:
355 case XGL_FMT_R16G16B16A16_SFLOAT:
356 case XGL_FMT_R32_SFLOAT:
357 case XGL_FMT_R32G32_SFLOAT:
358 case XGL_FMT_R32G32B32_SFLOAT:
359 case XGL_FMT_R32G32B32A32_SFLOAT:
360 case XGL_FMT_R64_SFLOAT:
361 case XGL_FMT_R64G64_SFLOAT:
362 case XGL_FMT_R64G64B64_SFLOAT:
363 case XGL_FMT_R64G64B64A64_SFLOAT:
364 case XGL_FMT_R11G11B10_UFLOAT:
365 case XGL_FMT_R9G9B9E5_UFLOAT:
366 case XGL_FMT_BC6H_UFLOAT:
367 case XGL_FMT_BC6H_SFLOAT:
368 is_float = true;
369 break;
370 default:
371 break;
372 }
373
374 return is_float;
375}
376
377bool icd_format_is_srgb(XGL_FORMAT format)
378{
379 bool is_srgb = false;
380
381 switch (format) {
382 case XGL_FMT_R8_SRGB:
383 case XGL_FMT_R8G8_SRGB:
384 case XGL_FMT_R8G8B8_SRGB:
385 case XGL_FMT_R8G8B8A8_SRGB:
Courtney Goeltzenleuchterfe8a2e12015-03-03 11:30:36 -0700386 case XGL_FMT_BC1_RGB_SRGB:
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700387 case XGL_FMT_BC2_SRGB:
388 case XGL_FMT_BC3_SRGB:
389 case XGL_FMT_BC7_SRGB:
390 case XGL_FMT_ASTC_4x4_SRGB:
Courtney Goeltzenleuchterfe8a2e12015-03-03 11:30:36 -0700391 case XGL_FMT_ASTC_5x4_SRGB:
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700392 case XGL_FMT_ASTC_5x5_SRGB:
393 case XGL_FMT_ASTC_6x5_SRGB:
394 case XGL_FMT_ASTC_6x6_SRGB:
395 case XGL_FMT_ASTC_8x5_SRGB:
396 case XGL_FMT_ASTC_8x6_SRGB:
397 case XGL_FMT_ASTC_8x8_SRGB:
398 case XGL_FMT_ASTC_10x5_SRGB:
399 case XGL_FMT_ASTC_10x6_SRGB:
400 case XGL_FMT_ASTC_10x8_SRGB:
401 case XGL_FMT_ASTC_10x10_SRGB:
402 case XGL_FMT_ASTC_12x10_SRGB:
403 case XGL_FMT_ASTC_12x12_SRGB:
404 case XGL_FMT_B8G8R8_SRGB:
405 case XGL_FMT_B8G8R8A8_SRGB:
406 is_srgb = true;
407 break;
408 default:
409 break;
410 }
411
412 return is_srgb;
413}
414
415bool icd_format_is_compressed(XGL_FORMAT format)
416{
417 switch (format) {
Courtney Goeltzenleuchterfe8a2e12015-03-03 11:30:36 -0700418 case XGL_FMT_BC1_RGB_UNORM:
419 case XGL_FMT_BC1_RGB_SRGB:
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700420 case XGL_FMT_BC2_UNORM:
421 case XGL_FMT_BC2_SRGB:
422 case XGL_FMT_BC3_UNORM:
423 case XGL_FMT_BC3_SRGB:
424 case XGL_FMT_BC4_UNORM:
425 case XGL_FMT_BC4_SNORM:
426 case XGL_FMT_BC5_UNORM:
427 case XGL_FMT_BC5_SNORM:
428 case XGL_FMT_BC6H_UFLOAT:
429 case XGL_FMT_BC6H_SFLOAT:
430 case XGL_FMT_BC7_UNORM:
431 case XGL_FMT_BC7_SRGB:
432 case XGL_FMT_ETC2_R8G8B8_UNORM:
433 case XGL_FMT_ETC2_R8G8B8A1_UNORM:
434 case XGL_FMT_ETC2_R8G8B8A8_UNORM:
435 case XGL_FMT_EAC_R11_UNORM:
436 case XGL_FMT_EAC_R11_SNORM:
437 case XGL_FMT_EAC_R11G11_UNORM:
438 case XGL_FMT_EAC_R11G11_SNORM:
439 case XGL_FMT_ASTC_4x4_UNORM:
440 case XGL_FMT_ASTC_4x4_SRGB:
Courtney Goeltzenleuchterfe8a2e12015-03-03 11:30:36 -0700441 case XGL_FMT_ASTC_5x4_UNORM:
442 case XGL_FMT_ASTC_5x4_SRGB:
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700443 case XGL_FMT_ASTC_5x5_UNORM:
444 case XGL_FMT_ASTC_5x5_SRGB:
445 case XGL_FMT_ASTC_6x5_UNORM:
446 case XGL_FMT_ASTC_6x5_SRGB:
447 case XGL_FMT_ASTC_6x6_UNORM:
448 case XGL_FMT_ASTC_6x6_SRGB:
449 case XGL_FMT_ASTC_8x5_UNORM:
450 case XGL_FMT_ASTC_8x5_SRGB:
451 case XGL_FMT_ASTC_8x6_UNORM:
452 case XGL_FMT_ASTC_8x6_SRGB:
453 case XGL_FMT_ASTC_8x8_UNORM:
454 case XGL_FMT_ASTC_8x8_SRGB:
455 case XGL_FMT_ASTC_10x5_UNORM:
456 case XGL_FMT_ASTC_10x5_SRGB:
457 case XGL_FMT_ASTC_10x6_UNORM:
458 case XGL_FMT_ASTC_10x6_SRGB:
459 case XGL_FMT_ASTC_10x8_UNORM:
460 case XGL_FMT_ASTC_10x8_SRGB:
461 case XGL_FMT_ASTC_10x10_UNORM:
462 case XGL_FMT_ASTC_10x10_SRGB:
463 case XGL_FMT_ASTC_12x10_UNORM:
464 case XGL_FMT_ASTC_12x10_SRGB:
465 case XGL_FMT_ASTC_12x12_UNORM:
466 case XGL_FMT_ASTC_12x12_SRGB:
467 return true;
468 default:
469 return false;
470 }
471}
472
Chia-I Wu54ed0792014-12-27 14:14:50 +0800473size_t icd_format_get_size(XGL_FORMAT format)
Chia-I Wub5a1add2014-08-16 12:46:32 +0800474{
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700475 return icd_format_table[format].size;
Chia-I Wub5a1add2014-08-16 12:46:32 +0800476}
Chia-I Wu40ee55b2014-10-08 09:12:58 +0800477
Jon Ashburnc6ae13d2015-01-19 15:00:26 -0700478XGL_IMAGE_FORMAT_CLASS icd_format_get_class(XGL_FORMAT format)
479{
480 if (icd_format_is_undef(format))
481 assert(!"undefined format");
482 if (icd_format_is_compressed(format)) {
483 switch (icd_format_get_size(format)) {
484 case 8:
485 return XGL_IMAGE_FORMAT_CLASS_64_BIT_BLOCK;
486 case 16:
487 return XGL_IMAGE_FORMAT_CLASS_128_BIT_BLOCK;
488 default:
489 assert(!"illegal compressed format");
490 }
491 } else if (icd_format_is_ds(format)) {
492 switch (icd_format_get_size(format)) {
493 case 1:
494 return XGL_IMAGE_FORMAT_CLASS_S8;
495 case 2:
496 return XGL_IMAGE_FORMAT_CLASS_D16;
497 case 3:
498 switch (icd_format_get_channel_count(format)) {
499 case 1:
500 return XGL_IMAGE_FORMAT_CLASS_D24;
501 case 2:
502 return XGL_IMAGE_FORMAT_CLASS_D16S8;
503 default:
504 assert(!"illegal depth stencil format channels");
505 }
506 case 4:
507 switch (icd_format_get_channel_count(format)) {
508 case 1:
509 return XGL_IMAGE_FORMAT_CLASS_D32;
510 case 2:
511 return XGL_IMAGE_FORMAT_CLASS_D24S8;
512 default:
513 assert(!"illegal depth stencil format channels");
514 }
515 case 5:
516 return XGL_IMAGE_FORMAT_CLASS_D32S8;
517 default:
518 assert(!"illegal depth stencil format");
519 }
520 } else { /* uncompressed color format */
521 switch (icd_format_get_size(format)) {
522 case 1:
523 return XGL_IMAGE_FORMAT_CLASS_8_BITS;
524 case 2:
525 return XGL_IMAGE_FORMAT_CLASS_16_BITS;
526 case 3:
527 return XGL_IMAGE_FORMAT_CLASS_24_BITS;
528 case 4:
529 return XGL_IMAGE_FORMAT_CLASS_32_BITS;
530 case 6:
531 return XGL_IMAGE_FORMAT_CLASS_48_BITS;
532 case 8:
533 return XGL_IMAGE_FORMAT_CLASS_64_BITS;
534 case 12:
535 return XGL_IMAGE_FORMAT_CLASS_96_BITS;
536 case 16:
537 return XGL_IMAGE_FORMAT_CLASS_128_BITS;
538 default:
539 assert(!"illegal uncompressed color format");
540 }
541 }
542}
543
Chia-I Wu40ee55b2014-10-08 09:12:58 +0800544unsigned int icd_format_get_channel_count(XGL_FORMAT format)
545{
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700546 return icd_format_table[format].channel_count;
Chia-I Wu40ee55b2014-10-08 09:12:58 +0800547}
Chia-I Wu92096a92014-12-21 23:07:08 +0800548
549/**
550 * Convert a raw RGBA color to a raw value. \p value must have at least
551 * icd_format_get_size(format) bytes.
552 */
553void icd_format_get_raw_value(XGL_FORMAT format,
Mark Lobodzinskie2d07a52015-01-29 08:55:56 -0600554 const uint32_t color[4],
Chia-I Wu92096a92014-12-21 23:07:08 +0800555 void *value)
556{
557 /* assume little-endian */
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700558 switch (format) {
559 case XGL_FMT_UNDEFINED:
Chia-I Wu92096a92014-12-21 23:07:08 +0800560 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700561 case XGL_FMT_R4G4_UNORM:
562 case XGL_FMT_R4G4_USCALED:
Chia-I Wu92096a92014-12-21 23:07:08 +0800563 ((uint8_t *) value)[0] = (color[0] & 0xf) << 0 |
564 (color[1] & 0xf) << 4;
565 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700566 case XGL_FMT_R4G4B4A4_UNORM:
567 case XGL_FMT_R4G4B4A4_USCALED:
Chia-I Wu92096a92014-12-21 23:07:08 +0800568 ((uint16_t *) value)[0] = (color[0] & 0xf) << 0 |
569 (color[1] & 0xf) << 4 |
570 (color[2] & 0xf) << 8 |
571 (color[3] & 0xf) << 12;
572 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700573 case XGL_FMT_R5G6B5_UNORM:
574 case XGL_FMT_R5G6B5_USCALED:
Chia-I Wu92096a92014-12-21 23:07:08 +0800575 ((uint16_t *) value)[0] = (color[0] & 0x1f) << 0 |
576 (color[1] & 0x3f) << 5 |
577 (color[2] & 0x1f) << 11;
578 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700579 case XGL_FMT_B5G6R5_UNORM:
Chia-I Wu92096a92014-12-21 23:07:08 +0800580 ((uint16_t *) value)[0] = (color[2] & 0x1f) << 0 |
581 (color[1] & 0x3f) << 5 |
582 (color[0] & 0x1f) << 11;
583 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700584 case XGL_FMT_R5G5B5A1_UNORM:
585 case XGL_FMT_R5G5B5A1_USCALED:
Chia-I Wu92096a92014-12-21 23:07:08 +0800586 ((uint16_t *) value)[0] = (color[0] & 0x1f) << 0 |
587 (color[1] & 0x1f) << 5 |
588 (color[2] & 0x1f) << 10 |
589 (color[3] & 0x1) << 15;
590 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700591 case XGL_FMT_R8_UNORM:
592 case XGL_FMT_R8_SNORM:
593 case XGL_FMT_R8_USCALED:
594 case XGL_FMT_R8_SSCALED:
595 case XGL_FMT_R8_UINT:
596 case XGL_FMT_R8_SINT:
597 case XGL_FMT_R8_SRGB:
Chia-I Wu92096a92014-12-21 23:07:08 +0800598 ((uint8_t *) value)[0] = (uint8_t) color[0];
599 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700600 case XGL_FMT_R8G8_UNORM:
601 case XGL_FMT_R8G8_SNORM:
602 case XGL_FMT_R8G8_USCALED:
603 case XGL_FMT_R8G8_SSCALED:
604 case XGL_FMT_R8G8_UINT:
605 case XGL_FMT_R8G8_SINT:
606 case XGL_FMT_R8G8_SRGB:
Chia-I Wu92096a92014-12-21 23:07:08 +0800607 ((uint8_t *) value)[0] = (uint8_t) color[0];
608 ((uint8_t *) value)[1] = (uint8_t) color[1];
609 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700610 case XGL_FMT_R8G8B8A8_UNORM:
611 case XGL_FMT_R8G8B8A8_SNORM:
612 case XGL_FMT_R8G8B8A8_USCALED:
613 case XGL_FMT_R8G8B8A8_SSCALED:
614 case XGL_FMT_R8G8B8A8_UINT:
615 case XGL_FMT_R8G8B8A8_SINT:
616 case XGL_FMT_R8G8B8A8_SRGB:
Chia-I Wu92096a92014-12-21 23:07:08 +0800617 ((uint8_t *) value)[0] = (uint8_t) color[0];
618 ((uint8_t *) value)[1] = (uint8_t) color[1];
619 ((uint8_t *) value)[2] = (uint8_t) color[2];
620 ((uint8_t *) value)[3] = (uint8_t) color[3];
621 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700622 case XGL_FMT_B8G8R8A8_UNORM:
623 case XGL_FMT_B8G8R8A8_SRGB:
Chia-I Wu92096a92014-12-21 23:07:08 +0800624 ((uint8_t *) value)[0] = (uint8_t) color[2];
625 ((uint8_t *) value)[1] = (uint8_t) color[1];
626 ((uint8_t *) value)[2] = (uint8_t) color[0];
627 ((uint8_t *) value)[3] = (uint8_t) color[3];
628 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700629 case XGL_FMT_R11G11B10_UFLOAT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800630 ((uint32_t *) value)[0] = (color[0] & 0x7ff) << 0 |
631 (color[1] & 0x7ff) << 11 |
632 (color[2] & 0x3ff) << 22;
633 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700634 case XGL_FMT_R10G10B10A2_UNORM:
635 case XGL_FMT_R10G10B10A2_SNORM:
636 case XGL_FMT_R10G10B10A2_USCALED:
637 case XGL_FMT_R10G10B10A2_SSCALED:
638 case XGL_FMT_R10G10B10A2_UINT:
639 case XGL_FMT_R10G10B10A2_SINT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800640 ((uint32_t *) value)[0] = (color[0] & 0x3ff) << 0 |
641 (color[1] & 0x3ff) << 10 |
642 (color[2] & 0x3ff) << 20 |
643 (color[3] & 0x3) << 30;
644 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700645 case XGL_FMT_R16_UNORM:
646 case XGL_FMT_R16_SNORM:
647 case XGL_FMT_R16_USCALED:
648 case XGL_FMT_R16_SSCALED:
649 case XGL_FMT_R16_UINT:
650 case XGL_FMT_R16_SINT:
651 case XGL_FMT_R16_SFLOAT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800652 ((uint16_t *) value)[0] = (uint16_t) color[0];
653 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700654 case XGL_FMT_R16G16_UNORM:
655 case XGL_FMT_R16G16_SNORM:
656 case XGL_FMT_R16G16_USCALED:
657 case XGL_FMT_R16G16_SSCALED:
658 case XGL_FMT_R16G16_UINT:
659 case XGL_FMT_R16G16_SINT:
660 case XGL_FMT_R16G16_SFLOAT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800661 ((uint16_t *) value)[0] = (uint16_t) color[0];
662 ((uint16_t *) value)[1] = (uint16_t) color[1];
663 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700664 case XGL_FMT_R16G16B16A16_UNORM:
665 case XGL_FMT_R16G16B16A16_SNORM:
666 case XGL_FMT_R16G16B16A16_USCALED:
667 case XGL_FMT_R16G16B16A16_SSCALED:
668 case XGL_FMT_R16G16B16A16_UINT:
669 case XGL_FMT_R16G16B16A16_SINT:
670 case XGL_FMT_R16G16B16A16_SFLOAT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800671 ((uint16_t *) value)[0] = (uint16_t) color[0];
672 ((uint16_t *) value)[1] = (uint16_t) color[1];
673 ((uint16_t *) value)[2] = (uint16_t) color[2];
674 ((uint16_t *) value)[3] = (uint16_t) color[3];
675 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700676 case XGL_FMT_R32_UINT:
677 case XGL_FMT_R32_SINT:
678 case XGL_FMT_R32_SFLOAT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800679 ((uint32_t *) value)[0] = color[0];
680 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700681 case XGL_FMT_R32G32_UINT:
682 case XGL_FMT_R32G32_SINT:
683 case XGL_FMT_R32G32_SFLOAT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800684 ((uint32_t *) value)[0] = color[0];
685 ((uint32_t *) value)[1] = color[1];
686 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700687 case XGL_FMT_R32G32B32_UINT:
688 case XGL_FMT_R32G32B32_SINT:
689 case XGL_FMT_R32G32B32_SFLOAT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800690 ((uint32_t *) value)[0] = color[0];
691 ((uint32_t *) value)[1] = color[1];
692 ((uint32_t *) value)[2] = color[2];
693 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700694 case XGL_FMT_R32G32B32A32_UINT:
695 case XGL_FMT_R32G32B32A32_SINT:
696 case XGL_FMT_R32G32B32A32_SFLOAT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800697 ((uint32_t *) value)[0] = color[0];
698 ((uint32_t *) value)[1] = color[1];
699 ((uint32_t *) value)[2] = color[2];
700 ((uint32_t *) value)[3] = color[3];
701 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700702 case XGL_FMT_D16_UNORM_S8_UINT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800703 ((uint16_t *) value)[0] = (uint16_t) color[0];
704 ((char *) value)[2] = (uint8_t) color[1];
705 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700706 case XGL_FMT_D32_SFLOAT_S8_UINT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800707 ((uint32_t *) value)[0] = (uint32_t) color[0];
708 ((char *) value)[4] = (uint8_t) color[1];
709 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700710 case XGL_FMT_R9G9B9E5_UFLOAT:
Chia-I Wu92096a92014-12-21 23:07:08 +0800711 ((uint32_t *) value)[0] = (color[0] & 0x1ff) << 0 |
712 (color[1] & 0x1ff) << 9 |
713 (color[2] & 0x1ff) << 18 |
714 (color[3] & 0x1f) << 27;
715 break;
Courtney Goeltzenleuchterfe8a2e12015-03-03 11:30:36 -0700716 case XGL_FMT_BC1_RGB_UNORM:
717 case XGL_FMT_BC1_RGB_SRGB:
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700718 case XGL_FMT_BC4_UNORM:
719 case XGL_FMT_BC4_SNORM:
Chia-I Wu92096a92014-12-21 23:07:08 +0800720 memcpy(value, color, 8);
721 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700722 case XGL_FMT_BC2_UNORM:
723 case XGL_FMT_BC2_SRGB:
724 case XGL_FMT_BC3_UNORM:
725 case XGL_FMT_BC3_SRGB:
726 case XGL_FMT_BC5_UNORM:
727 case XGL_FMT_BC5_SNORM:
728 case XGL_FMT_BC6H_UFLOAT:
729 case XGL_FMT_BC6H_SFLOAT:
730 case XGL_FMT_BC7_UNORM:
731 case XGL_FMT_BC7_SRGB:
Chia-I Wu92096a92014-12-21 23:07:08 +0800732 memcpy(value, color, 16);
733 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700734 case XGL_FMT_R8G8B8_UNORM:
735 case XGL_FMT_R8G8B8_SNORM:
736 case XGL_FMT_R8G8B8_USCALED:
737 case XGL_FMT_R8G8B8_SSCALED:
738 case XGL_FMT_R8G8B8_UINT:
739 case XGL_FMT_R8G8B8_SINT:
740 case XGL_FMT_R8G8B8_SRGB:
Chia-I Wuc581bd52015-01-18 14:51:02 +0800741 ((uint8_t *) value)[0] = (uint8_t) color[0];
742 ((uint8_t *) value)[1] = (uint8_t) color[1];
743 ((uint8_t *) value)[2] = (uint8_t) color[2];
744 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700745 case XGL_FMT_R16G16B16_UNORM:
746 case XGL_FMT_R16G16B16_SNORM:
747 case XGL_FMT_R16G16B16_USCALED:
748 case XGL_FMT_R16G16B16_SSCALED:
749 case XGL_FMT_R16G16B16_UINT:
750 case XGL_FMT_R16G16B16_SINT:
751 case XGL_FMT_R16G16B16_SFLOAT:
Chia-I Wuc581bd52015-01-18 14:51:02 +0800752 ((uint16_t *) value)[0] = (uint16_t) color[0];
753 ((uint16_t *) value)[1] = (uint16_t) color[1];
754 ((uint16_t *) value)[2] = (uint16_t) color[2];
755 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700756 case XGL_FMT_B10G10R10A2_UNORM:
757 case XGL_FMT_B10G10R10A2_SNORM:
758 case XGL_FMT_B10G10R10A2_USCALED:
759 case XGL_FMT_B10G10R10A2_SSCALED:
760 case XGL_FMT_B10G10R10A2_UINT:
761 case XGL_FMT_B10G10R10A2_SINT:
Chia-I Wuc581bd52015-01-18 14:51:02 +0800762 ((uint32_t *) value)[0] = (color[2] & 0x3ff) << 0 |
763 (color[1] & 0x3ff) << 10 |
764 (color[0] & 0x3ff) << 20 |
765 (color[3] & 0x3) << 30;
766 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700767 case XGL_FMT_R64_SFLOAT:
Chia-I Wuc581bd52015-01-18 14:51:02 +0800768 /* higher 32 bits always 0 */
769 ((uint64_t *) value)[0] = color[0];
770 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700771 case XGL_FMT_R64G64_SFLOAT:
Chia-I Wuc581bd52015-01-18 14:51:02 +0800772 ((uint64_t *) value)[0] = color[0];
773 ((uint64_t *) value)[1] = color[1];
774 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700775 case XGL_FMT_R64G64B64_SFLOAT:
Chia-I Wuc581bd52015-01-18 14:51:02 +0800776 ((uint64_t *) value)[0] = color[0];
777 ((uint64_t *) value)[1] = color[1];
778 ((uint64_t *) value)[2] = color[2];
779 break;
Jeremy Hayes2b7e88a2015-01-23 08:51:43 -0700780 case XGL_FMT_R64G64B64A64_SFLOAT:
Chia-I Wuc581bd52015-01-18 14:51:02 +0800781 ((uint64_t *) value)[0] = color[0];
782 ((uint64_t *) value)[1] = color[1];
783 ((uint64_t *) value)[2] = color[2];
784 ((uint64_t *) value)[3] = color[3];
785 break;
Chia-I Wu92096a92014-12-21 23:07:08 +0800786 default:
787 assert(!"unknown format");
788 break;
789 }
790}