Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/modules/dds/dds_enums.h
11352 views
1
/**************************************************************************/
2
/* dds_enums.h */
3
/**************************************************************************/
4
/* This file is part of: */
5
/* GODOT ENGINE */
6
/* https://godotengine.org */
7
/**************************************************************************/
8
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
9
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
10
/* */
11
/* Permission is hereby granted, free of charge, to any person obtaining */
12
/* a copy of this software and associated documentation files (the */
13
/* "Software"), to deal in the Software without restriction, including */
14
/* without limitation the rights to use, copy, modify, merge, publish, */
15
/* distribute, sublicense, and/or sell copies of the Software, and to */
16
/* permit persons to whom the Software is furnished to do so, subject to */
17
/* the following conditions: */
18
/* */
19
/* The above copyright notice and this permission notice shall be */
20
/* included in all copies or substantial portions of the Software. */
21
/* */
22
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
23
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
24
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
25
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
26
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
27
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
28
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29
/**************************************************************************/
30
31
#pragma once
32
33
#include "core/io/image.h"
34
35
#define PF_FOURCC(m_s) ((uint32_t)(((m_s)[3] << 24U) | ((m_s)[2] << 16U) | ((m_s)[1] << 8U) | ((m_s)[0])))
36
37
// Reference: https://docs.microsoft.com/en-us/windows/win32/direct3ddds/dds-header
38
39
enum {
40
DDS_MAGIC = 0x20534444,
41
DDS_HEADER_SIZE = 124,
42
DDS_PIXELFORMAT_SIZE = 32,
43
44
DDSD_PITCH = 0x00000008,
45
DDSD_LINEARSIZE = 0x00080000,
46
DDSD_MIPMAPCOUNT = 0x00020000,
47
DDSD_CAPS = 0x1,
48
DDSD_HEIGHT = 0x2,
49
DDSD_WIDTH = 0x4,
50
DDSD_PIXELFORMAT = 0x1000,
51
DDPF_ALPHAPIXELS = 0x00000001,
52
DDPF_ALPHAONLY = 0x00000002,
53
DDPF_FOURCC = 0x00000004,
54
DDPF_RGB = 0x00000040,
55
DDPF_RG_SNORM = 0x00080000,
56
57
DDSC2_CUBEMAP = 0x200,
58
DDSC2_VOLUME = 0x200000,
59
60
DX10D_1D = 2,
61
DX10D_2D = 3,
62
DX10D_3D = 4,
63
};
64
65
enum DDSFourCC {
66
DDFCC_DXT1 = PF_FOURCC("DXT1"),
67
DDFCC_DXT2 = PF_FOURCC("DXT2"),
68
DDFCC_DXT3 = PF_FOURCC("DXT3"),
69
DDFCC_DXT4 = PF_FOURCC("DXT4"),
70
DDFCC_DXT5 = PF_FOURCC("DXT5"),
71
DDFCC_ATI1 = PF_FOURCC("ATI1"),
72
DDFCC_BC4U = PF_FOURCC("BC4U"),
73
DDFCC_ATI2 = PF_FOURCC("ATI2"),
74
DDFCC_BC5U = PF_FOURCC("BC5U"),
75
DDFCC_A2XY = PF_FOURCC("A2XY"),
76
DDFCC_DX10 = PF_FOURCC("DX10"),
77
DDFCC_RGBA16 = 36,
78
DDFCC_R16F = 111,
79
DDFCC_RG16F = 112,
80
DDFCC_RGBA16F = 113,
81
DDFCC_R32F = 114,
82
DDFCC_RG32F = 115,
83
DDFCC_RGBA32F = 116,
84
};
85
86
// Reference: https://learn.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format
87
enum DXGIFormat {
88
DXGI_R32G32B32A32_FLOAT = 2,
89
DXGI_R32G32B32_FLOAT = 6,
90
DXGI_R16G16B16A16_FLOAT = 10,
91
DXGI_R16G16B16A16_UNORM = 11,
92
DXGI_R16G16B16A16_UINT = 12,
93
DXGI_R32G32_FLOAT = 16,
94
DXGI_R10G10B10A2_UNORM = 24,
95
DXGI_R8G8B8A8_UNORM = 28,
96
DXGI_R8G8B8A8_UNORM_SRGB = 29,
97
DXGI_R16G16_FLOAT = 34,
98
DXGI_R16G16_UNORM = 35,
99
DXGI_R16G16_UINT = 36,
100
DXGI_R32_FLOAT = 41,
101
DXGI_R8G8_UNORM = 49,
102
DXGI_R16_FLOAT = 54,
103
DXGI_R16_UNORM = 56,
104
DXGI_R16_UINT = 57,
105
DXGI_R8_UNORM = 61,
106
DXGI_A8_UNORM = 65,
107
DXGI_R9G9B9E5 = 67,
108
DXGI_BC1_UNORM = 71,
109
DXGI_BC1_UNORM_SRGB = 72,
110
DXGI_BC2_UNORM = 74,
111
DXGI_BC2_UNORM_SRGB = 75,
112
DXGI_BC3_UNORM = 77,
113
DXGI_BC3_UNORM_SRGB = 78,
114
DXGI_BC4_UNORM = 80,
115
DXGI_BC5_UNORM = 83,
116
DXGI_B5G6R5_UNORM = 85,
117
DXGI_B5G5R5A1_UNORM = 86,
118
DXGI_B8G8R8A8_UNORM = 87,
119
DXGI_BC6H_UF16 = 95,
120
DXGI_BC6H_SF16 = 96,
121
DXGI_BC7_UNORM = 98,
122
DXGI_BC7_UNORM_SRGB = 99,
123
DXGI_B4G4R4A4_UNORM = 115,
124
};
125
126
// The legacy bitmasked format names here represent the actual data layout in the files,
127
// while their official names are flipped (e.g. RGBA8 layout is officially called ABGR8).
128
enum DDSFormat {
129
DDS_DXT1,
130
DDS_DXT3,
131
DDS_DXT5,
132
DDS_ATI1,
133
DDS_ATI2,
134
DDS_BC6U,
135
DDS_BC6S,
136
DDS_BC7,
137
DDS_R16,
138
DDS_RG16,
139
DDS_RGBA16,
140
DDS_R16I,
141
DDS_RG16I,
142
DDS_RGBA16I,
143
DDS_R16F,
144
DDS_RG16F,
145
DDS_RGBA16F,
146
DDS_R32F,
147
DDS_RG32F,
148
DDS_RGB32F,
149
DDS_RGBA32F,
150
DDS_RGB9E5,
151
DDS_RGB8,
152
DDS_RGBA8,
153
DDS_RGBX8,
154
DDS_BGR8,
155
DDS_BGRA8,
156
DDS_BGRX8,
157
DDS_BGR5A1,
158
DDS_BGR565,
159
DDS_B2GR3,
160
DDS_B2GR3A8,
161
DDS_BGR10A2,
162
DDS_RGB10A2,
163
DDS_BGRA4,
164
DDS_LUMINANCE,
165
DDS_LUMINANCE_ALPHA,
166
DDS_LUMINANCE_ALPHA_4,
167
DDS_MAX
168
};
169
170
enum DDSType {
171
DDST_2D = 1,
172
DDST_CUBEMAP,
173
DDST_3D,
174
175
DDST_TYPE_MASK = 0x7F,
176
DDST_ARRAY = 0x80,
177
};
178
179
struct DDSFormatInfo {
180
const char *name = nullptr;
181
bool compressed = false;
182
uint32_t divisor = 0;
183
uint32_t block_size = 0;
184
Image::Format format = Image::Format::FORMAT_BPTC_RGBA;
185
};
186
187
static const DDSFormatInfo dds_format_info[DDS_MAX] = {
188
{ "DXT1/BC1", true, 4, 8, Image::FORMAT_DXT1 },
189
{ "DXT2/DXT3/BC2", true, 4, 16, Image::FORMAT_DXT3 },
190
{ "DXT4/DXT5/BC3", true, 4, 16, Image::FORMAT_DXT5 },
191
{ "ATI1/BC4", true, 4, 8, Image::FORMAT_RGTC_R },
192
{ "ATI2/A2XY/BC5", true, 4, 16, Image::FORMAT_RGTC_RG },
193
{ "BC6UF", true, 4, 16, Image::FORMAT_BPTC_RGBFU },
194
{ "BC6SF", true, 4, 16, Image::FORMAT_BPTC_RGBF },
195
{ "BC7", true, 4, 16, Image::FORMAT_BPTC_RGBA },
196
{ "R16", false, 1, 2, Image::FORMAT_R16 },
197
{ "RG16", false, 1, 4, Image::FORMAT_RG16 },
198
{ "RGBA16", false, 1, 8, Image::FORMAT_RGBA16 },
199
{ "R16I", false, 1, 2, Image::FORMAT_R16I },
200
{ "RG16I", false, 1, 4, Image::FORMAT_RG16I },
201
{ "RGBA16I", false, 1, 8, Image::FORMAT_RGBA16I },
202
{ "R16F", false, 1, 2, Image::FORMAT_RH },
203
{ "RG16F", false, 1, 4, Image::FORMAT_RGH },
204
{ "RGBA16F", false, 1, 8, Image::FORMAT_RGBAH },
205
{ "R32F", false, 1, 4, Image::FORMAT_RF },
206
{ "RG32F", false, 1, 8, Image::FORMAT_RGF },
207
{ "RGB32F", false, 1, 12, Image::FORMAT_RGBF },
208
{ "RGBA32F", false, 1, 16, Image::FORMAT_RGBAF },
209
{ "RGB9E5", false, 1, 4, Image::FORMAT_RGBE9995 },
210
{ "RGB8", false, 1, 3, Image::FORMAT_RGB8 },
211
{ "RGBA8", false, 1, 4, Image::FORMAT_RGBA8 },
212
{ "RGBX8", false, 1, 4, Image::FORMAT_RGB8 },
213
{ "BGR8", false, 1, 3, Image::FORMAT_RGB8 },
214
{ "BGRA8", false, 1, 4, Image::FORMAT_RGBA8 },
215
{ "BGRX8", false, 1, 4, Image::FORMAT_RGB8 },
216
{ "BGR5A1", false, 1, 2, Image::FORMAT_RGBA8 },
217
{ "BGR565", false, 1, 2, Image::FORMAT_RGB565 },
218
{ "B2GR3", false, 1, 1, Image::FORMAT_RGB8 },
219
{ "B2GR3A8", false, 1, 2, Image::FORMAT_RGBA8 },
220
{ "BGR10A2", false, 1, 4, Image::FORMAT_RGBA8 },
221
{ "RGB10A2", false, 1, 4, Image::FORMAT_RGBA8 },
222
{ "BGRA4", false, 1, 2, Image::FORMAT_RGBA4444 },
223
{ "GRAYSCALE", false, 1, 1, Image::FORMAT_L8 },
224
{ "GRAYSCALE_ALPHA", false, 1, 2, Image::FORMAT_LA8 },
225
{ "GRAYSCALE_ALPHA_4", false, 1, 1, Image::FORMAT_LA8 },
226
};
227
228