1 //-------------------------------------------------------------------------------------
4 // DirectX Texture Library
6 // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
7 // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
8 // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
11 // Copyright (c) Microsoft Corporation. All rights reserved.
13 // http://go.microsoft.com/fwlink/?LinkId=248926
14 //-------------------------------------------------------------------------------------
16 #if defined(_MSC_VER) && (_MSC_VER > 1000)
20 //=====================================================================================
21 // DXGI Format Utilities
22 //=====================================================================================
24 inline bool IsValid( DXGI_FORMAT fmt )
26 #ifdef DXGI_1_2_FORMATS
27 return ( static_cast<size_t>(fmt) >= 1 && static_cast<size_t>(fmt) <= 115 );
29 return ( static_cast<size_t>(fmt) >= 1 && static_cast<size_t>(fmt) <= 99 );
33 inline bool IsCompressed( DXGI_FORMAT fmt )
37 case DXGI_FORMAT_BC1_TYPELESS:
38 case DXGI_FORMAT_BC1_UNORM:
39 case DXGI_FORMAT_BC1_UNORM_SRGB:
40 case DXGI_FORMAT_BC2_TYPELESS:
41 case DXGI_FORMAT_BC2_UNORM:
42 case DXGI_FORMAT_BC2_UNORM_SRGB:
43 case DXGI_FORMAT_BC3_TYPELESS:
44 case DXGI_FORMAT_BC3_UNORM:
45 case DXGI_FORMAT_BC3_UNORM_SRGB:
46 case DXGI_FORMAT_BC4_TYPELESS:
47 case DXGI_FORMAT_BC4_UNORM:
48 case DXGI_FORMAT_BC4_SNORM:
49 case DXGI_FORMAT_BC5_TYPELESS:
50 case DXGI_FORMAT_BC5_UNORM:
51 case DXGI_FORMAT_BC5_SNORM:
52 case DXGI_FORMAT_BC6H_TYPELESS:
53 case DXGI_FORMAT_BC6H_UF16:
54 case DXGI_FORMAT_BC6H_SF16:
55 case DXGI_FORMAT_BC7_TYPELESS:
56 case DXGI_FORMAT_BC7_UNORM:
57 case DXGI_FORMAT_BC7_UNORM_SRGB:
65 inline bool IsPacked( DXGI_FORMAT fmt )
67 return ( (fmt == DXGI_FORMAT_R8G8_B8G8_UNORM) || (fmt == DXGI_FORMAT_G8R8_G8B8_UNORM) );
70 inline bool IsVideo( DXGI_FORMAT fmt )
72 #ifdef DXGI_1_2_FORMATS
75 case DXGI_FORMAT_AYUV:
76 case DXGI_FORMAT_Y410:
77 case DXGI_FORMAT_Y416:
78 case DXGI_FORMAT_NV12:
79 case DXGI_FORMAT_P010:
80 case DXGI_FORMAT_P016:
81 case DXGI_FORMAT_YUY2:
82 case DXGI_FORMAT_Y210:
83 case DXGI_FORMAT_Y216:
84 case DXGI_FORMAT_NV11:
85 // These video formats can be used with the 3D pipeline through special view mappings
88 case DXGI_FORMAT_420_OPAQUE:
89 case DXGI_FORMAT_AI44:
90 case DXGI_FORMAT_IA44:
92 case DXGI_FORMAT_A8P8:
93 // These are limited use video formats not usable in any way by the 3D pipeline
99 #else // !DXGI_1_2_FORMATS
100 UNREFERENCED_PARAMETER(fmt);
105 inline bool IsSRGB( DXGI_FORMAT fmt )
109 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
110 case DXGI_FORMAT_BC1_UNORM_SRGB:
111 case DXGI_FORMAT_BC2_UNORM_SRGB:
112 case DXGI_FORMAT_BC3_UNORM_SRGB:
113 case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
114 case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
115 case DXGI_FORMAT_BC7_UNORM_SRGB:
123 inline bool IsTypeless( DXGI_FORMAT fmt )
127 case DXGI_FORMAT_R32G32B32A32_TYPELESS:
128 case DXGI_FORMAT_R32G32B32_TYPELESS:
129 case DXGI_FORMAT_R16G16B16A16_TYPELESS:
130 case DXGI_FORMAT_R32G32_TYPELESS:
131 case DXGI_FORMAT_R32G8X24_TYPELESS:
132 case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
133 case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
134 case DXGI_FORMAT_R10G10B10A2_TYPELESS:
135 case DXGI_FORMAT_R8G8B8A8_TYPELESS:
136 case DXGI_FORMAT_R16G16_TYPELESS:
137 case DXGI_FORMAT_R32_TYPELESS:
138 case DXGI_FORMAT_R24G8_TYPELESS:
139 case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
140 case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
141 case DXGI_FORMAT_R8G8_TYPELESS:
142 case DXGI_FORMAT_R16_TYPELESS:
143 case DXGI_FORMAT_R8_TYPELESS:
144 case DXGI_FORMAT_BC1_TYPELESS:
145 case DXGI_FORMAT_BC2_TYPELESS:
146 case DXGI_FORMAT_BC3_TYPELESS:
147 case DXGI_FORMAT_BC4_TYPELESS:
148 case DXGI_FORMAT_BC5_TYPELESS:
149 case DXGI_FORMAT_B8G8R8A8_TYPELESS:
150 case DXGI_FORMAT_B8G8R8X8_TYPELESS:
151 case DXGI_FORMAT_BC6H_TYPELESS:
152 case DXGI_FORMAT_BC7_TYPELESS:
160 inline size_t ComputeScanlines( _In_ DXGI_FORMAT fmt, _In_ size_t height )
164 case DXGI_FORMAT_BC1_TYPELESS:
165 case DXGI_FORMAT_BC1_UNORM:
166 case DXGI_FORMAT_BC1_UNORM_SRGB:
167 case DXGI_FORMAT_BC2_TYPELESS:
168 case DXGI_FORMAT_BC2_UNORM:
169 case DXGI_FORMAT_BC2_UNORM_SRGB:
170 case DXGI_FORMAT_BC3_TYPELESS:
171 case DXGI_FORMAT_BC3_UNORM:
172 case DXGI_FORMAT_BC3_UNORM_SRGB:
173 case DXGI_FORMAT_BC4_TYPELESS:
174 case DXGI_FORMAT_BC4_UNORM:
175 case DXGI_FORMAT_BC4_SNORM:
176 case DXGI_FORMAT_BC5_TYPELESS:
177 case DXGI_FORMAT_BC5_UNORM:
178 case DXGI_FORMAT_BC5_SNORM:
179 case DXGI_FORMAT_BC6H_TYPELESS:
180 case DXGI_FORMAT_BC6H_UF16:
181 case DXGI_FORMAT_BC6H_SF16:
182 case DXGI_FORMAT_BC7_TYPELESS:
183 case DXGI_FORMAT_BC7_UNORM:
184 case DXGI_FORMAT_BC7_UNORM_SRGB:
185 return std::max<size_t>( 1, (height + 3) / 4 );
192 //=====================================================================================
194 //=====================================================================================
195 inline HRESULT SaveToDDSMemory( const Image& image, DWORD flags, Blob& blob )
198 memset( &mdata, 0, sizeof(mdata) );
199 mdata.width = image.width;
200 mdata.height = image.height;
204 mdata.format = image.format;
205 mdata.dimension = TEX_DIMENSION_TEXTURE2D;
207 return SaveToDDSMemory( &image, 1, mdata, flags, blob );
210 inline HRESULT SaveToDDSFile( const Image& image, DWORD flags, LPCWSTR szFile )
213 memset( &mdata, 0, sizeof(mdata) );
214 mdata.width = image.width;
215 mdata.height = image.height;
219 mdata.format = image.format;
220 mdata.dimension = TEX_DIMENSION_TEXTURE2D;
222 return SaveToDDSFile( &image, 1, mdata, flags, szFile );