Merge remote-tracking branch 'origin/master' into vulkan
[mesa.git] / src / intel / isl / isl_format.c
1 /*
2 * Copyright 2015 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 */
23
24 #include <assert.h>
25
26 #include "isl.h"
27
28 bool
29 isl_format_has_sint_channel(enum isl_format fmt)
30 {
31 const struct isl_format_layout *fmtl = isl_format_get_layout(fmt);
32
33 return fmtl->channels.r.type == ISL_SINT ||
34 fmtl->channels.g.type == ISL_SINT ||
35 fmtl->channels.b.type == ISL_SINT ||
36 fmtl->channels.a.type == ISL_SINT ||
37 fmtl->channels.l.type == ISL_SINT ||
38 fmtl->channels.i.type == ISL_SINT ||
39 fmtl->channels.p.type == ISL_SINT ||
40 fmtl->channels.g.type == ISL_SINT;
41 }
42
43 enum isl_format
44 isl_format_rgb_to_rgba(enum isl_format rgb)
45 {
46 assert(isl_format_is_rgb(rgb));
47
48 switch (rgb) {
49 case ISL_FORMAT_R32G32B32_FLOAT: return ISL_FORMAT_R32G32B32A32_FLOAT;
50 case ISL_FORMAT_R32G32B32_SINT: return ISL_FORMAT_R32G32B32A32_SINT;
51 case ISL_FORMAT_R32G32B32_UINT: return ISL_FORMAT_R32G32B32A32_UINT;
52 case ISL_FORMAT_R32G32B32_UNORM: return ISL_FORMAT_R32G32B32A32_UNORM;
53 case ISL_FORMAT_R32G32B32_SNORM: return ISL_FORMAT_R32G32B32A32_SNORM;
54 case ISL_FORMAT_R32G32B32_SSCALED: return ISL_FORMAT_R32G32B32A32_SSCALED;
55 case ISL_FORMAT_R32G32B32_USCALED: return ISL_FORMAT_R32G32B32A32_USCALED;
56 case ISL_FORMAT_R32G32B32_SFIXED: return ISL_FORMAT_R32G32B32A32_SFIXED;
57 case ISL_FORMAT_R8G8B8_UNORM: return ISL_FORMAT_R8G8B8A8_UNORM;
58 case ISL_FORMAT_R8G8B8_SNORM: return ISL_FORMAT_R8G8B8A8_SNORM;
59 case ISL_FORMAT_R8G8B8_SSCALED: return ISL_FORMAT_R8G8B8A8_SSCALED;
60 case ISL_FORMAT_R8G8B8_USCALED: return ISL_FORMAT_R8G8B8A8_USCALED;
61 case ISL_FORMAT_R16G16B16_FLOAT: return ISL_FORMAT_R16G16B16A16_FLOAT;
62 case ISL_FORMAT_R16G16B16_UNORM: return ISL_FORMAT_R16G16B16A16_UNORM;
63 case ISL_FORMAT_R16G16B16_SNORM: return ISL_FORMAT_R16G16B16A16_SNORM;
64 case ISL_FORMAT_R16G16B16_SSCALED: return ISL_FORMAT_R16G16B16A16_SSCALED;
65 case ISL_FORMAT_R16G16B16_USCALED: return ISL_FORMAT_R16G16B16A16_USCALED;
66 case ISL_FORMAT_R8G8B8_UNORM_SRGB: return ISL_FORMAT_R8G8B8A8_UNORM_SRGB;
67 case ISL_FORMAT_R16G16B16_UINT: return ISL_FORMAT_R16G16B16A16_UINT;
68 case ISL_FORMAT_R16G16B16_SINT: return ISL_FORMAT_R16G16B16A16_SINT;
69 case ISL_FORMAT_R8G8B8_UINT: return ISL_FORMAT_R8G8B8A8_UINT;
70 case ISL_FORMAT_R8G8B8_SINT: return ISL_FORMAT_R8G8B8A8_SINT;
71 default:
72 return ISL_FORMAT_UNSUPPORTED;
73 }
74 }
75
76 enum isl_format
77 isl_format_rgb_to_rgbx(enum isl_format rgb)
78 {
79 assert(isl_format_is_rgb(rgb));
80
81 switch (rgb) {
82 case ISL_FORMAT_R32G32B32_FLOAT:
83 return ISL_FORMAT_R32G32B32X32_FLOAT;
84 case ISL_FORMAT_R16G16B16_UNORM:
85 return ISL_FORMAT_R16G16B16X16_UNORM;
86 case ISL_FORMAT_R16G16B16_FLOAT:
87 return ISL_FORMAT_R16G16B16X16_FLOAT;
88 case ISL_FORMAT_R8G8B8_UNORM:
89 return ISL_FORMAT_R8G8B8X8_UNORM;
90 case ISL_FORMAT_R8G8B8_UNORM_SRGB:
91 return ISL_FORMAT_R8G8B8X8_UNORM_SRGB;
92 default:
93 return ISL_FORMAT_UNSUPPORTED;
94 }
95 }