]> git.cworth.org Git - vogl/blob - src/voglcore/dds_defs.h
Initial vogl checkin
[vogl] / src / voglcore / dds_defs.h
1 /**************************************************************************
2  *
3  * Copyright 2013-2014 RAD Game Tools and Valve Software
4  * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
5  * All Rights Reserved.
6  *
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:
13  *
14  * The above copyright notice and this permission notice shall be included in
15  * all copies or substantial portions of the Software.
16  *
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
23  * THE SOFTWARE.
24  *
25  **************************************************************************/
26
27 // File: dds_defs.h
28 // DX9 .DDS file header definitions.
29 #ifndef VOGL_DDS_DEFS_H
30 #define VOGL_DDS_DEFS_H
31
32 #include "vogl.h"
33
34 #define VOGL_PIXEL_FMT_FOURCC(a, b, c, d) ((a) | ((b) << 8U) | ((c) << 16U) | ((d) << 24U))
35
36 namespace vogl
37 {
38    enum pixel_format
39    {
40       PIXEL_FMT_INVALID               = 0,
41
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
50
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'),
56
57       PIXEL_FMT_DXT1A                 = VOGL_PIXEL_FMT_FOURCC('D', 'X', '1', 'A'),
58       PIXEL_FMT_ETC1                  = VOGL_PIXEL_FMT_FOURCC('E', 'T', 'C', '1'),
59
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')
65    };
66
67    const vogl_uint32 cDDSMaxImageDimensions = 8192U;
68
69    // Total size of header is sizeof(uint32)+cDDSSizeofDDSurfaceDesc2;
70    const vogl_uint32 cDDSSizeofDDSurfaceDesc2 = 124;
71
72    // "DDS "
73    const vogl_uint32 cDDSFileSignature = 0x20534444;
74
75    struct DDCOLORKEY
76    {
77       vogl_uint32 dwUnused0;
78       vogl_uint32 dwUnused1;
79    };
80
81    struct DDPIXELFORMAT
82    {
83       vogl_uint32 dwSize;
84       vogl_uint32 dwFlags;
85       vogl_uint32 dwFourCC;
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;
91    };
92
93    struct DDSCAPS2
94    {
95       vogl_uint32 dwCaps;
96       vogl_uint32 dwCaps2;
97       vogl_uint32 dwCaps3;
98       vogl_uint32 dwCaps4;
99    };
100
101    struct DDSURFACEDESC2
102    {
103       vogl_uint32 dwSize;
104       vogl_uint32 dwFlags;
105       vogl_uint32 dwHeight;
106       vogl_uint32 dwWidth;
107       union
108       {
109          vogl_int32 lPitch;
110          vogl_uint32 dwLinearSize;
111       };
112       vogl_uint32 dwBackBufferCount;
113       vogl_uint32 dwMipMapCount;
114       vogl_uint32 dwAlphaBitDepth;
115       vogl_uint32 dwUnused0;
116       vogl_uint32 lpSurface;
117       DDCOLORKEY unused0;
118       DDCOLORKEY unused1;
119       DDCOLORKEY unused2;
120       DDCOLORKEY unused3;
121       DDPIXELFORMAT ddpfPixelFormat;
122       DDSCAPS2 ddsCaps;
123       vogl_uint32 dwUnused1;
124    };
125    
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;
130
131    const vogl_uint32 DDSD_BACKBUFFERCOUNT        = 0x00000020;
132    const vogl_uint32 DDSD_ZBUFFERBITDEPTH        = 0x00000040;
133    const vogl_uint32 DDSD_ALPHABITDEPTH          = 0x00000080;
134
135    const vogl_uint32 DDSD_LPSURFACE              = 0x00000800;
136                                                             
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;
141
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;
146
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;
151    
152    const vogl_uint32 DDSD_ALL                    = 0x00fff9ee;
153
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;
160
161    const vogl_uint32 DDSCAPS_COMPLEX             = 0x00000008;
162    const vogl_uint32 DDSCAPS_TEXTURE             = 0x00001000;
163    const vogl_uint32 DDSCAPS_MIPMAP              = 0x00400000;
164
165    const vogl_uint32 DDSCAPS2_CUBEMAP            = 0x00000200;
166    const vogl_uint32 DDSCAPS2_CUBEMAP_POSITIVEX  = 0x00000400;
167    const vogl_uint32 DDSCAPS2_CUBEMAP_NEGATIVEX  = 0x00000800;
168
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;
173
174    const vogl_uint32 DDSCAPS2_VOLUME             = 0x00200000;
175
176 } // namespace vogl
177
178 #endif // VOGL_DDS_DEFS_H