5namespace Grindstone::Formats::DDS {
6 using DWORD =
unsigned long;
19 constexpr DWORD DDPF_ALPHAPIXELS = 0x1;
20 constexpr DWORD DDPF_ALPHA = 0x2;
21 constexpr DWORD DDPF_FOURCC = 0x4;
22 constexpr DWORD DDPF_RGB = 0x40;
23 constexpr DWORD DDPF_YUV = 0x200;
24 constexpr DWORD DDPF_LUMINANCE = 0x20000;
26 constexpr DWORD DDSD_CAPS = 0x1;
27 constexpr DWORD DDSD_HEIGHT = 0x2;
28 constexpr DWORD DDSD_WIDTH = 0x4;
29 constexpr DWORD DDSD_PITCH = 0x8;
30 constexpr DWORD DDSD_PIXELFORMAT = 0x1000;
31 constexpr DWORD DDSD_MIPMAPCOUNT = 0x20000;
32 constexpr DWORD DDSD_LINEARSIZE = 0x80000;
33 constexpr DWORD DDSD_DEPTH = 0x800000;
34 constexpr DWORD DDSD_REQUIRED =
46 DWORD dwPitchOrLinearSize;
49 DWORD dwReserved1[11];
58 enum class DxgiFormat : uint32_t {
60 R32G32B32A32_TYPELESS = 1,
61 R32G32B32A32_FLOAT = 2,
62 R32G32B32A32_UINT = 3,
63 R32G32B32A32_SINT = 4,
64 R32G32B32_TYPELESS = 5,
68 R16G16B16A16_TYPELESS = 9,
69 R16G16B16A16_FLOAT = 10,
70 R16G16B16A16_UNORM = 11,
71 R16G16B16A16_UINT = 12,
72 R16G16B16A16_SNORM = 13,
73 R16G16B16A16_SINT = 14,
78 R32G8X24_TYPELESS = 19,
79 D32_FLOAT_S8X24_UINT = 20,
80 R32_FLOAT_X8X24_TYPELESS = 21,
81 X32_TYPELESS_G8X24_UINT = 22,
82 R10G10B10A2_TYPELESS = 23,
83 R10G10B10A2_UNORM = 24,
84 R10G10B10A2_UINT = 25,
86 R8G8B8A8_TYPELESS = 27,
88 R8G8B8A8_UNORM_SRGB = 29,
104 D24_UNORM_S8_UINT = 45,
105 R24_UNORM_X8_TYPELESS = 46,
106 X24_TYPELESS_G8_UINT = 47,
126 R9G9B9E5_SHAREDEXP = 67,
127 R8G8_B8G8_UNORM = 68,
128 G8R8_G8B8_UNORM = 69,
148 R10G10B10_XR_BIAS_A2_UNORM = 89,
149 B8G8R8A8_TYPELESS = 90,
150 B8G8R8A8_UNORM_SRGB = 91,
151 B8G8R8X8_TYPELESS = 92,
152 B8G8R8X8_UNORM_SRGB = 93,
174 B4G4R4A4_UNORM = 115,
178 SAMPLER_FEEDBACK_MIN_MIP_OPAQUE,
179 SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE,
180 FORCE_UINT = 0xffffffff
183 enum class D3d10ResourceDimension : uint32_t {
184 D3D10_RESOURCE_DIMENSION_UNKNOWN = 0,
185 D3D10_RESOURCE_DIMENSION_BUFFER = 1,
186 D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2,
187 D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3,
188 D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4
192 DxgiFormat dxgiFormat = DxgiFormat::UNKNOWN;
193 D3d10ResourceDimension resourceDimension = D3d10ResourceDimension::D3D10_RESOURCE_DIMENSION_TEXTURE2D;
199 constexpr DWORD MakeFourCC(
char c0,
char c1,
char c2,
char c3) {
200 return ((DWORD)(
char)(c0) | ((DWORD)(
char)(c1) << 8) | \
201 ((DWORD)(
char)(c2) << 16) | ((DWORD)(
char)(c3) << 24));
204 constexpr DWORD MakeFourCCStr(
const char* str) {
205 return MakeFourCC(str[0], str[1], str[2], str[3]);
208 constexpr DWORD FOURCC_R8G8_B8G8_UNORM = MakeFourCC(
'R',
'G',
'B',
'G');
209 constexpr DWORD FOURCC_G8R8_G8B8_UNORM = MakeFourCC(
'G',
'R',
'G',
'B');
210 constexpr DWORD FOURCC_R16G16B16A16_UNORM = 36;
211 constexpr DWORD FOURCC_R16G16B16A16_SNORM = 110;
212 constexpr DWORD FOURCC_R16_SFLOAT = 111;
213 constexpr DWORD FOURCC_R16G16_SFLOAT = 112;
214 constexpr DWORD FOURCC_R16G16B16A16_SFLOAT = 113;
215 constexpr DWORD FOURCC_R32_SFLOAT = 114;
216 constexpr DWORD FOURCC_R32G32_SFLOAT = 115;
217 constexpr DWORD FOURCC_R32G32B32A32_SFLOAT = 116;
218 constexpr DWORD FOURCC_CxV8U8 = 117;
219 constexpr DWORD FOURCC_DXT2_UNORM = MakeFourCC(
'D',
'X',
'T',
'2');
220 constexpr DWORD FOURCC_DXT4_UNORM = MakeFourCC(
'D',
'X',
'T',
'4');
221 constexpr DWORD FOURCC_BC1_UNORM = MakeFourCC(
'D',
'X',
'T',
'1');
222 constexpr DWORD FOURCC_BC2_UNORM = MakeFourCC(
'D',
'X',
'T',
'3');
223 constexpr DWORD FOURCC_BC3_UNORM = MakeFourCC(
'D',
'X',
'T',
'5');
224 constexpr DWORD FOURCC_BC4_UNORM_ATI = MakeFourCC(
'A',
'T',
'I',
'1');
225 constexpr DWORD FOURCC_BC4_UNORM = MakeFourCC(
'B',
'C',
'4',
'U');
226 constexpr DWORD FOURCC_BC4_SNORM = MakeFourCC(
'B',
'C',
'4',
'S');
227 constexpr DWORD FOURCC_BC5_UNORM_ATI = MakeFourCC(
'A',
'T',
'I',
'2');
228 constexpr DWORD FOURCC_BC5_UNORM = MakeFourCC(
'B',
'C',
'5',
'U');
229 constexpr DWORD FOURCC_BC5_SNORM = MakeFourCC(
'B',
'C',
'5',
'S');
230 constexpr DWORD FOURCC_UYVY = MakeFourCC(
'U',
'Y',
'V',
'Y');
231 constexpr DWORD FOURCC_YUY2 = MakeFourCC(
'Y',
'U',
'Y',
'2');
232 constexpr DWORD FOURCC_DXGI = MakeFourCC(
'D',
'X',
'1',
'0');
234 constexpr DWORD DXGI_BC6H = 95;
236 constexpr DWORD DDSCAPS_COMPLEX = 0x8;
237 constexpr DWORD DDSCAPS_MIPMAP = 0x400000;
238 constexpr DWORD DDSCAPS_TEXTURE = 0x1000;
240 constexpr DWORD DDS_RESOURCE_MISC_TEXTURECUBE = 0x4;
242 constexpr DWORD DDSCAPS2_CUBEMAP = 0x200;
243 constexpr DWORD DDSCAPS2_CUBEMAP_POSITIVEX = 0x400;
244 constexpr DWORD DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800;
245 constexpr DWORD DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000;
246 constexpr DWORD DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000;
247 constexpr DWORD DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000;
248 constexpr DWORD DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000;
249 constexpr DWORD DDSCAPS2_CUBEMAP_VOLUME = 0x200000;
251 constexpr DWORD DDS_CUBEMAP_ALLFACES =
253 DDSCAPS2_CUBEMAP_POSITIVEX |
254 DDSCAPS2_CUBEMAP_NEGATIVEX |
255 DDSCAPS2_CUBEMAP_POSITIVEY |
256 DDSCAPS2_CUBEMAP_NEGATIVEY |
257 DDSCAPS2_CUBEMAP_POSITIVEZ |
258 DDSCAPS2_CUBEMAP_NEGATIVEZ;