Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/modules/dds/dds_enums.h
10277 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_R16F = 111,
78
DDFCC_RG16F = 112,
79
DDFCC_RGBA16F = 113,
80
DDFCC_R32F = 114,
81
DDFCC_RG32F = 115,
82
DDFCC_RGBA32F = 116,
83
};
84
85
// Reference: https://learn.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format
86
enum DXGIFormat {
87
DXGI_R32G32B32A32_FLOAT = 2,
88
DXGI_R32G32B32_FLOAT = 6,
89
DXGI_R16G16B16A16_FLOAT = 10,
90
DXGI_R32G32_FLOAT = 16,
91
DXGI_R10G10B10A2_UNORM = 24,
92
DXGI_R8G8B8A8_UNORM = 28,
93
DXGI_R8G8B8A8_UNORM_SRGB = 29,
94
DXGI_R16G16_FLOAT = 34,
95
DXGI_R32_FLOAT = 41,
96
DXGI_R8G8_UNORM = 49,
97
DXGI_R16_FLOAT = 54,
98
DXGI_R8_UNORM = 61,
99
DXGI_A8_UNORM = 65,
100
DXGI_R9G9B9E5 = 67,
101
DXGI_BC1_UNORM = 71,
102
DXGI_BC1_UNORM_SRGB = 72,
103
DXGI_BC2_UNORM = 74,
104
DXGI_BC2_UNORM_SRGB = 75,
105
DXGI_BC3_UNORM = 77,
106
DXGI_BC3_UNORM_SRGB = 78,
107
DXGI_BC4_UNORM = 80,
108
DXGI_BC5_UNORM = 83,
109
DXGI_B5G6R5_UNORM = 85,
110
DXGI_B5G5R5A1_UNORM = 86,
111
DXGI_B8G8R8A8_UNORM = 87,
112
DXGI_BC6H_UF16 = 95,
113
DXGI_BC6H_SF16 = 96,
114
DXGI_BC7_UNORM = 98,
115
DXGI_BC7_UNORM_SRGB = 99,
116
DXGI_B4G4R4A4_UNORM = 115,
117
};
118
119
// The legacy bitmasked format names here represent the actual data layout in the files,
120
// while their official names are flipped (e.g. RGBA8 layout is officially called ABGR8).
121
enum DDSFormat {
122
DDS_DXT1,
123
DDS_DXT3,
124
DDS_DXT5,
125
DDS_ATI1,
126
DDS_ATI2,
127
DDS_BC6U,
128
DDS_BC6S,
129
DDS_BC7,
130
DDS_R16F,
131
DDS_RG16F,
132
DDS_RGBA16F,
133
DDS_R32F,
134
DDS_RG32F,
135
DDS_RGB32F,
136
DDS_RGBA32F,
137
DDS_RGB9E5,
138
DDS_RGB8,
139
DDS_RGBA8,
140
DDS_RGBX8,
141
DDS_BGR8,
142
DDS_BGRA8,
143
DDS_BGRX8,
144
DDS_BGR5A1,
145
DDS_BGR565,
146
DDS_B2GR3,
147
DDS_B2GR3A8,
148
DDS_BGR10A2,
149
DDS_RGB10A2,
150
DDS_BGRA4,
151
DDS_LUMINANCE,
152
DDS_LUMINANCE_ALPHA,
153
DDS_LUMINANCE_ALPHA_4,
154
DDS_MAX
155
};
156
157
enum DDSType {
158
DDST_2D = 1,
159
DDST_CUBEMAP,
160
DDST_3D,
161
162
DDST_TYPE_MASK = 0x7F,
163
DDST_ARRAY = 0x80,
164
};
165
166
struct DDSFormatInfo {
167
const char *name = nullptr;
168
bool compressed = false;
169
uint32_t divisor = 0;
170
uint32_t block_size = 0;
171
Image::Format format = Image::Format::FORMAT_BPTC_RGBA;
172
};
173
174
static const DDSFormatInfo dds_format_info[DDS_MAX] = {
175
{ "DXT1/BC1", true, 4, 8, Image::FORMAT_DXT1 },
176
{ "DXT2/DXT3/BC2", true, 4, 16, Image::FORMAT_DXT3 },
177
{ "DXT4/DXT5/BC3", true, 4, 16, Image::FORMAT_DXT5 },
178
{ "ATI1/BC4", true, 4, 8, Image::FORMAT_RGTC_R },
179
{ "ATI2/A2XY/BC5", true, 4, 16, Image::FORMAT_RGTC_RG },
180
{ "BC6UF", true, 4, 16, Image::FORMAT_BPTC_RGBFU },
181
{ "BC6SF", true, 4, 16, Image::FORMAT_BPTC_RGBF },
182
{ "BC7", true, 4, 16, Image::FORMAT_BPTC_RGBA },
183
{ "R16F", false, 1, 2, Image::FORMAT_RH },
184
{ "RG16F", false, 1, 4, Image::FORMAT_RGH },
185
{ "RGBA16F", false, 1, 8, Image::FORMAT_RGBAH },
186
{ "R32F", false, 1, 4, Image::FORMAT_RF },
187
{ "RG32F", false, 1, 8, Image::FORMAT_RGF },
188
{ "RGB32F", false, 1, 12, Image::FORMAT_RGBF },
189
{ "RGBA32F", false, 1, 16, Image::FORMAT_RGBAF },
190
{ "RGB9E5", false, 1, 4, Image::FORMAT_RGBE9995 },
191
{ "RGB8", false, 1, 3, Image::FORMAT_RGB8 },
192
{ "RGBA8", false, 1, 4, Image::FORMAT_RGBA8 },
193
{ "RGBX8", false, 1, 4, Image::FORMAT_RGB8 },
194
{ "BGR8", false, 1, 3, Image::FORMAT_RGB8 },
195
{ "BGRA8", false, 1, 4, Image::FORMAT_RGBA8 },
196
{ "BGRX8", false, 1, 4, Image::FORMAT_RGB8 },
197
{ "BGR5A1", false, 1, 2, Image::FORMAT_RGBA8 },
198
{ "BGR565", false, 1, 2, Image::FORMAT_RGB565 },
199
{ "B2GR3", false, 1, 1, Image::FORMAT_RGB8 },
200
{ "B2GR3A8", false, 1, 2, Image::FORMAT_RGBA8 },
201
{ "BGR10A2", false, 1, 4, Image::FORMAT_RGBA8 },
202
{ "RGB10A2", false, 1, 4, Image::FORMAT_RGBA8 },
203
{ "BGRA4", false, 1, 2, Image::FORMAT_RGBA4444 },
204
{ "GRAYSCALE", false, 1, 1, Image::FORMAT_L8 },
205
{ "GRAYSCALE_ALPHA", false, 1, 2, Image::FORMAT_LA8 },
206
{ "GRAYSCALE_ALPHA_4", false, 1, 1, Image::FORMAT_LA8 },
207
};
208
209