1 /**************************************************************************
3 * Copyright 2013-2014 RAD Game Tools and Valve Software
4 * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 **************************************************************************/
28 // DX9 .DDS file header definitions.
29 #ifndef VOGL_DDS_DEFS_H
30 #define VOGL_DDS_DEFS_H
34 #define VOGL_PIXEL_FMT_FOURCC(a, b, c, d) ((a) | ((b) << 8U) | ((c) << 16U) | ((d) << 24U))
40 PIXEL_FMT_INVALID = 0,
42 PIXEL_FMT_DXT1 = VOGL_PIXEL_FMT_FOURCC('D', 'X', 'T', '1'),
43 PIXEL_FMT_DXT2 = VOGL_PIXEL_FMT_FOURCC('D', 'X', 'T', '2'),
44 PIXEL_FMT_DXT3 = VOGL_PIXEL_FMT_FOURCC('D', 'X', 'T', '3'),
45 PIXEL_FMT_DXT4 = VOGL_PIXEL_FMT_FOURCC('D', 'X', 'T', '4'),
46 PIXEL_FMT_DXT5 = VOGL_PIXEL_FMT_FOURCC('D', 'X', 'T', '5'),
47 PIXEL_FMT_3DC = VOGL_PIXEL_FMT_FOURCC('A', 'T', 'I', '2'), // DXN_YX
48 PIXEL_FMT_DXN = VOGL_PIXEL_FMT_FOURCC('A', '2', 'X', 'Y'), // DXN_XY
49 PIXEL_FMT_DXT5A = VOGL_PIXEL_FMT_FOURCC('A', 'T', 'I', '1'), // ATI1N, http://developer.amd.com/media/gpu_assets/Radeon_X1x00_Programming_Guide.pdf
51 // Non-standard, voglcore-specific pixel formats (some of these are supported by ATI's Compressonator)
52 PIXEL_FMT_DXT5_CCxY = VOGL_PIXEL_FMT_FOURCC('C', 'C', 'x', 'Y'),
53 PIXEL_FMT_DXT5_xGxR = VOGL_PIXEL_FMT_FOURCC('x', 'G', 'x', 'R'),
54 PIXEL_FMT_DXT5_xGBR = VOGL_PIXEL_FMT_FOURCC('x', 'G', 'B', 'R'),
55 PIXEL_FMT_DXT5_AGBR = VOGL_PIXEL_FMT_FOURCC('A', 'G', 'B', 'R'),
57 PIXEL_FMT_DXT1A = VOGL_PIXEL_FMT_FOURCC('D', 'X', '1', 'A'),
58 PIXEL_FMT_ETC1 = VOGL_PIXEL_FMT_FOURCC('E', 'T', 'C', '1'),
60 PIXEL_FMT_R8G8B8 = VOGL_PIXEL_FMT_FOURCC('R', 'G', 'B', 'x'),
61 PIXEL_FMT_L8 = VOGL_PIXEL_FMT_FOURCC('L', 'x', 'x', 'x'),
62 PIXEL_FMT_A8 = VOGL_PIXEL_FMT_FOURCC('x', 'x', 'x', 'A'),
63 PIXEL_FMT_A8L8 = VOGL_PIXEL_FMT_FOURCC('L', 'x', 'x', 'A'),
64 PIXEL_FMT_A8R8G8B8 = VOGL_PIXEL_FMT_FOURCC('R', 'G', 'B', 'A')
67 const vogl_uint32 cDDSMaxImageDimensions = 8192U;
69 // Total size of header is sizeof(uint32)+cDDSSizeofDDSurfaceDesc2;
70 const vogl_uint32 cDDSSizeofDDSurfaceDesc2 = 124;
73 const vogl_uint32 cDDSFileSignature = 0x20534444;
77 vogl_uint32 dwUnused0;
78 vogl_uint32 dwUnused1;
86 vogl_uint32 dwRGBBitCount; // ATI compressonator and voglcore will place a FOURCC code here for swizzled/cooked DXTn formats
87 vogl_uint32 dwRBitMask;
88 vogl_uint32 dwGBitMask;
89 vogl_uint32 dwBBitMask;
90 vogl_uint32 dwRGBAlphaBitMask;
101 struct DDSURFACEDESC2
105 vogl_uint32 dwHeight;
110 vogl_uint32 dwLinearSize;
112 vogl_uint32 dwBackBufferCount;
113 vogl_uint32 dwMipMapCount;
114 vogl_uint32 dwAlphaBitDepth;
115 vogl_uint32 dwUnused0;
116 vogl_uint32 lpSurface;
121 DDPIXELFORMAT ddpfPixelFormat;
123 vogl_uint32 dwUnused1;
126 const vogl_uint32 DDSD_CAPS = 0x00000001;
127 const vogl_uint32 DDSD_HEIGHT = 0x00000002;
128 const vogl_uint32 DDSD_WIDTH = 0x00000004;
129 const vogl_uint32 DDSD_PITCH = 0x00000008;
131 const vogl_uint32 DDSD_BACKBUFFERCOUNT = 0x00000020;
132 const vogl_uint32 DDSD_ZBUFFERBITDEPTH = 0x00000040;
133 const vogl_uint32 DDSD_ALPHABITDEPTH = 0x00000080;
135 const vogl_uint32 DDSD_LPSURFACE = 0x00000800;
137 const vogl_uint32 DDSD_PIXELFORMAT = 0x00001000;
138 const vogl_uint32 DDSD_CKDESTOVERLAY = 0x00002000;
139 const vogl_uint32 DDSD_CKDESTBLT = 0x00004000;
140 const vogl_uint32 DDSD_CKSRCOVERLAY = 0x00008000;
142 const vogl_uint32 DDSD_CKSRCBLT = 0x00010000;
143 const vogl_uint32 DDSD_MIPMAPCOUNT = 0x00020000;
144 const vogl_uint32 DDSD_REFRESHRATE = 0x00040000;
145 const vogl_uint32 DDSD_LINEARSIZE = 0x00080000;
147 const vogl_uint32 DDSD_TEXTURESTAGE = 0x00100000;
148 const vogl_uint32 DDSD_FVF = 0x00200000;
149 const vogl_uint32 DDSD_SRCVBHANDLE = 0x00400000;
150 const vogl_uint32 DDSD_DEPTH = 0x00800000;
152 const vogl_uint32 DDSD_ALL = 0x00fff9ee;
154 const vogl_uint32 DDPF_ALPHAPIXELS = 0x00000001;
155 const vogl_uint32 DDPF_ALPHA = 0x00000002;
156 const vogl_uint32 DDPF_FOURCC = 0x00000004;
157 const vogl_uint32 DDPF_PALETTEINDEXED8 = 0x00000020;
158 const vogl_uint32 DDPF_RGB = 0x00000040;
159 const vogl_uint32 DDPF_LUMINANCE = 0x00020000;
161 const vogl_uint32 DDSCAPS_COMPLEX = 0x00000008;
162 const vogl_uint32 DDSCAPS_TEXTURE = 0x00001000;
163 const vogl_uint32 DDSCAPS_MIPMAP = 0x00400000;
165 const vogl_uint32 DDSCAPS2_CUBEMAP = 0x00000200;
166 const vogl_uint32 DDSCAPS2_CUBEMAP_POSITIVEX = 0x00000400;
167 const vogl_uint32 DDSCAPS2_CUBEMAP_NEGATIVEX = 0x00000800;
169 const vogl_uint32 DDSCAPS2_CUBEMAP_POSITIVEY = 0x00001000;
170 const vogl_uint32 DDSCAPS2_CUBEMAP_NEGATIVEY = 0x00002000;
171 const vogl_uint32 DDSCAPS2_CUBEMAP_POSITIVEZ = 0x00004000;
172 const vogl_uint32 DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x00008000;
174 const vogl_uint32 DDSCAPS2_VOLUME = 0x00200000;
178 #endif // VOGL_DDS_DEFS_H