1/****************************************************************************
2 * Copyright (C) 2016 Intel Corporation.   All Rights Reserved.
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 * @file formats.h
24 *
25 * @brief auto-generated file
26 *
27 * DO NOT EDIT
28 *
29 ******************************************************************************/
30
31#pragma once
32
33#include "common/os.h"
34
35//////////////////////////////////////////////////////////////////////////
36/// SWR_TYPE - Format component type
37//////////////////////////////////////////////////////////////////////////
38enum SWR_TYPE
39{
40    SWR_TYPE_UNKNOWN,
41    SWR_TYPE_UNUSED,
42    SWR_TYPE_UNORM,
43    SWR_TYPE_SNORM,
44    SWR_TYPE_UINT,
45    SWR_TYPE_SINT,
46    SWR_TYPE_FLOAT,
47    SWR_TYPE_SSCALED,
48    SWR_TYPE_USCALED,
49    SWR_TYPE_SFIXED,
50};
51
52//////////////////////////////////////////////////////////////////////////
53/// SWR_FORMAT
54//////////////////////////////////////////////////////////////////////////
55enum SWR_FORMAT
56{
57    R32G32B32A32_FLOAT       = 0x0,
58    R32G32B32A32_SINT        = 0x1,
59    R32G32B32A32_UINT        = 0x2,
60    R64G64_FLOAT             = 0x5,
61    R32G32B32X32_FLOAT       = 0x6,
62    R32G32B32A32_SSCALED     = 0x7,
63    R32G32B32A32_USCALED     = 0x8,
64    R32G32B32A32_SFIXED      = 0x20,
65    R32G32B32_FLOAT          = 0x40,
66    R32G32B32_SINT           = 0x41,
67    R32G32B32_UINT           = 0x42,
68    R32G32B32_SSCALED        = 0x45,
69    R32G32B32_USCALED        = 0x46,
70    R32G32B32_SFIXED         = 0x50,
71    R16G16B16A16_UNORM       = 0x80,
72    R16G16B16A16_SNORM       = 0x81,
73    R16G16B16A16_SINT        = 0x82,
74    R16G16B16A16_UINT        = 0x83,
75    R16G16B16A16_FLOAT       = 0x84,
76    R32G32_FLOAT             = 0x85,
77    R32G32_SINT              = 0x86,
78    R32G32_UINT              = 0x87,
79    R32_FLOAT_X8X24_TYPELESS = 0x88,
80    X32_TYPELESS_G8X24_UINT  = 0x89,
81    L32A32_FLOAT             = 0x8A,
82    R64_FLOAT                = 0x8D,
83    R16G16B16X16_UNORM       = 0x8E,
84    R16G16B16X16_FLOAT       = 0x8F,
85    L32X32_FLOAT             = 0x91,
86    I32X32_FLOAT             = 0x92,
87    R16G16B16A16_SSCALED     = 0x93,
88    R16G16B16A16_USCALED     = 0x94,
89    R32G32_SSCALED           = 0x95,
90    R32G32_USCALED           = 0x96,
91    R32G32_SFIXED            = 0xA0,
92    B8G8R8A8_UNORM           = 0xC0,
93    B8G8R8A8_UNORM_SRGB      = 0xC1,
94    R10G10B10A2_UNORM        = 0xC2,
95    R10G10B10A2_UNORM_SRGB   = 0xC3,
96    R10G10B10A2_UINT         = 0xC4,
97    R8G8B8A8_UNORM           = 0xC7,
98    R8G8B8A8_UNORM_SRGB      = 0xC8,
99    R8G8B8A8_SNORM           = 0xC9,
100    R8G8B8A8_SINT            = 0xCA,
101    R8G8B8A8_UINT            = 0xCB,
102    R16G16_UNORM             = 0xCC,
103    R16G16_SNORM             = 0xCD,
104    R16G16_SINT              = 0xCE,
105    R16G16_UINT              = 0xCF,
106    R16G16_FLOAT             = 0xD0,
107    B10G10R10A2_UNORM        = 0xD1,
108    B10G10R10A2_UNORM_SRGB   = 0xD2,
109    R11G11B10_FLOAT          = 0xD3,
110    R10G10B10_FLOAT_A2_UNORM = 0xD5,
111    R32_SINT                 = 0xD6,
112    R32_UINT                 = 0xD7,
113    R32_FLOAT                = 0xD8,
114    R24_UNORM_X8_TYPELESS    = 0xD9,
115    X24_TYPELESS_G8_UINT     = 0xDA,
116    L32_UNORM                = 0xDD,
117    L16A16_UNORM             = 0xDF,
118    I24X8_UNORM              = 0xE0,
119    L24X8_UNORM              = 0xE1,
120    I32_FLOAT                = 0xE3,
121    L32_FLOAT                = 0xE4,
122    A32_FLOAT                = 0xE5,
123    B8G8R8X8_UNORM           = 0xE9,
124    B8G8R8X8_UNORM_SRGB      = 0xEA,
125    R8G8B8X8_UNORM           = 0xEB,
126    R8G8B8X8_UNORM_SRGB      = 0xEC,
127    R9G9B9E5_SHAREDEXP       = 0xED,
128    B10G10R10X2_UNORM        = 0xEE,
129    L16A16_FLOAT             = 0xF0,
130    R10G10B10X2_USCALED      = 0xF3,
131    R8G8B8A8_SSCALED         = 0xF4,
132    R8G8B8A8_USCALED         = 0xF5,
133    R16G16_SSCALED           = 0xF6,
134    R16G16_USCALED           = 0xF7,
135    R32_SSCALED              = 0xF8,
136    R32_USCALED              = 0xF9,
137    B5G6R5_UNORM             = 0x100,
138    B5G6R5_UNORM_SRGB        = 0x101,
139    B5G5R5A1_UNORM           = 0x102,
140    B5G5R5A1_UNORM_SRGB      = 0x103,
141    B4G4R4A4_UNORM           = 0x104,
142    B4G4R4A4_UNORM_SRGB      = 0x105,
143    R8G8_UNORM               = 0x106,
144    R8G8_SNORM               = 0x107,
145    R8G8_SINT                = 0x108,
146    R8G8_UINT                = 0x109,
147    R16_UNORM                = 0x10A,
148    R16_SNORM                = 0x10B,
149    R16_SINT                 = 0x10C,
150    R16_UINT                 = 0x10D,
151    R16_FLOAT                = 0x10E,
152    I16_UNORM                = 0x111,
153    L16_UNORM                = 0x112,
154    A16_UNORM                = 0x113,
155    L8A8_UNORM               = 0x114,
156    I16_FLOAT                = 0x115,
157    L16_FLOAT                = 0x116,
158    A16_FLOAT                = 0x117,
159    L8A8_UNORM_SRGB          = 0x118,
160    B5G5R5X1_UNORM           = 0x11A,
161    B5G5R5X1_UNORM_SRGB      = 0x11B,
162    R8G8_SSCALED             = 0x11C,
163    R8G8_USCALED             = 0x11D,
164    R16_SSCALED              = 0x11E,
165    R16_USCALED              = 0x11F,
166    A1B5G5R5_UNORM           = 0x124,
167    A4B4G4R4_UNORM           = 0x125,
168    L8A8_UINT                = 0x126,
169    L8A8_SINT                = 0x127,
170    R8_UNORM                 = 0x140,
171    R8_SNORM                 = 0x141,
172    R8_SINT                  = 0x142,
173    R8_UINT                  = 0x143,
174    A8_UNORM                 = 0x144,
175    I8_UNORM                 = 0x145,
176    L8_UNORM                 = 0x146,
177    R8_SSCALED               = 0x149,
178    R8_USCALED               = 0x14A,
179    L8_UNORM_SRGB            = 0x14C,
180    L8_UINT                  = 0x152,
181    L8_SINT                  = 0x153,
182    I8_UINT                  = 0x154,
183    I8_SINT                  = 0x155,
184    DXT1_RGB_SRGB            = 0x180,
185    YCRCB_SWAPUVY            = 0x183,
186    BC1_UNORM                = 0x186,
187    BC2_UNORM                = 0x187,
188    BC3_UNORM                = 0x188,
189    BC4_UNORM                = 0x189,
190    BC5_UNORM                = 0x18A,
191    BC1_UNORM_SRGB           = 0x18B,
192    BC2_UNORM_SRGB           = 0x18C,
193    BC3_UNORM_SRGB           = 0x18D,
194    YCRCB_SWAPUV             = 0x18F,
195    DXT1_RGB                 = 0x191,
196    R8G8B8_UNORM             = 0x193,
197    R8G8B8_SNORM             = 0x194,
198    R8G8B8_SSCALED           = 0x195,
199    R8G8B8_USCALED           = 0x196,
200    R64G64B64A64_FLOAT       = 0x197,
201    R64G64B64_FLOAT          = 0x198,
202    BC4_SNORM                = 0x199,
203    BC5_SNORM                = 0x19A,
204    R16G16B16_FLOAT          = 0x19B,
205    R16G16B16_UNORM          = 0x19C,
206    R16G16B16_SNORM          = 0x19D,
207    R16G16B16_SSCALED        = 0x19E,
208    R16G16B16_USCALED        = 0x19F,
209    BC6H_SF16                = 0x1A1,
210    BC7_UNORM                = 0x1A2,
211    BC7_UNORM_SRGB           = 0x1A3,
212    BC6H_UF16                = 0x1A4,
213    R8G8B8_UNORM_SRGB        = 0x1A8,
214    R16G16B16_UINT           = 0x1B0,
215    R16G16B16_SINT           = 0x1B1,
216    R32_SFIXED               = 0x1B2,
217    R10G10B10A2_SNORM        = 0x1B3,
218    R10G10B10A2_USCALED      = 0x1B4,
219    R10G10B10A2_SSCALED      = 0x1B5,
220    R10G10B10A2_SINT         = 0x1B6,
221    B10G10R10A2_SNORM        = 0x1B7,
222    B10G10R10A2_USCALED      = 0x1B8,
223    B10G10R10A2_SSCALED      = 0x1B9,
224    B10G10R10A2_UINT         = 0x1BA,
225    B10G10R10A2_SINT         = 0x1BB,
226    R8G8B8_UINT              = 0x1C8,
227    R8G8B8_SINT              = 0x1C9,
228    RAW                      = 0x1FF,
229    NUM_SWR_FORMATS          = 0x200,
230};
231
232//////////////////////////////////////////////////////////////////////////
233/// SWR_FORMAT_INFO - Format information
234//////////////////////////////////////////////////////////////////////////
235struct SWR_FORMAT_INFO
236{
237    const char* name;
238    SWR_TYPE    type[4];
239    uint32_t    defaults[4];
240    uint32_t    swizzle[4]; ///< swizzle per component
241    uint32_t    bpc[4];     ///< bits per component
242    uint32_t    bpp;        ///< bits per pixel
243    uint32_t    Bpp;        ///< bytes per pixel
244    uint32_t    numComps;   ///< number of components
245    bool        isSRGB;
246    bool        isBC;
247    bool        isSubsampled;
248    bool        isLuminance;
249    bool        isNormalized[4];
250    float       toFloat[4];
251    uint32_t    bcWidth;
252    uint32_t    bcHeight;
253};
254
255extern const SWR_FORMAT_INFO gFormatInfo[NUM_SWR_FORMATS];
256
257//////////////////////////////////////////////////////////////////////////
258/// @brief Retrieves format info struct for given format.
259/// @param format - SWR format
260INLINE const SWR_FORMAT_INFO& GetFormatInfo(SWR_FORMAT format)
261{
262    SWR_ASSERT(format < NUM_SWR_FORMATS, "Invalid Surface Format: %d", format);
263    SWR_ASSERT(gFormatInfo[format].name != nullptr, "Invalid Surface Format: %d", format);
264    return gFormatInfo[format];
265}
266
267// lookup table for unorm8 srgb -> float conversion
268extern const uint32_t srgb8Table[256];
269