25 using System.Collections.Generic;
27 namespace SiliconStudio.
Paradox.Graphics
34 private static readonly
int[] sizeOfInBits =
new int[256];
35 private static readonly
bool[] compressedFormats =
new bool[256];
36 private static readonly
bool[] srgbFormats =
new bool[256];
37 private static readonly
bool[] typelessFormats =
new bool[256];
43 if ((
int)format >= 1024)
44 return (
int)format - 1024 + 128;
56 return SizeInBits(format)/8;
66 return sizeOfInBits[GetIndex(format)];
76 return ( (
int)(format) >= 1 && (
int)(format) <= 115 )
77 || ((int) (format) >= 1024 && (int) (format) <= 1029)
79 || ((int) (format) >= 1120 && (int) (format) <= 1122);
89 return compressedFormats[GetIndex(fmt)];
125 case Format.Opaque420:
149 return srgbFormats[GetIndex(fmt)];
159 return typelessFormats[GetIndex(fmt)];
172 case PixelFormat.BC1_Typeless:
173 case PixelFormat.BC1_UNorm:
174 case PixelFormat.BC1_UNorm_SRgb:
175 case PixelFormat.BC2_Typeless:
176 case PixelFormat.BC2_UNorm:
177 case PixelFormat.BC2_UNorm_SRgb:
178 case PixelFormat.BC3_Typeless:
179 case PixelFormat.BC3_UNorm:
180 case PixelFormat.BC3_UNorm_SRgb:
181 case PixelFormat.BC4_Typeless:
182 case PixelFormat.BC4_UNorm:
183 case PixelFormat.BC4_SNorm:
184 case PixelFormat.BC5_Typeless:
185 case PixelFormat.BC5_UNorm:
186 case PixelFormat.BC5_SNorm:
187 case PixelFormat.BC6H_Typeless:
188 case PixelFormat.BC6H_Uf16:
189 case PixelFormat.BC6H_Sf16:
190 case PixelFormat.BC7_Typeless:
191 case PixelFormat.BC7_UNorm:
192 case PixelFormat.BC7_UNorm_SRgb:
193 case PixelFormat.PVRTC_2bpp_RGB:
194 case PixelFormat.PVRTC_2bpp_RGBA:
195 case PixelFormat.PVRTC_4bpp_RGB:
196 case PixelFormat.PVRTC_4bpp_RGBA:
197 case PixelFormat.PVRTC_II_2bpp:
198 case PixelFormat.PVRTC_II_4bpp:
199 case PixelFormat.ETC1:
200 case PixelFormat.ETC2_RGB:
201 case PixelFormat.ETC2_RGBA:
202 case PixelFormat.ETC2_RGB_A1:
203 case PixelFormat.EAC_R11_Unsigned:
204 case PixelFormat.EAC_R11_Signed:
205 case PixelFormat.EAC_RG11_Unsigned:
206 case PixelFormat.EAC_RG11_Signed:
207 case PixelFormat.ATC_RGB:
208 case PixelFormat.ATC_RGBA_Explicit:
209 case PixelFormat.ATC_RGBA_Interpolated:
210 return Math.Max(1, (height + 3) / 4);
222 InitFormat(
new[] { PixelFormat.R1_UNorm }, 1);
224 InitFormat(
new[] { PixelFormat.A8_UNorm, PixelFormat.R8_SInt, PixelFormat.R8_SNorm, PixelFormat.R8_Typeless, PixelFormat.R8_UInt, PixelFormat.R8_UNorm }, 8);
227 PixelFormat.B5G5R5A1_UNorm,
228 PixelFormat.B5G6R5_UNorm,
229 PixelFormat.D16_UNorm,
230 PixelFormat.R16_Float,
231 PixelFormat.R16_SInt,
232 PixelFormat.R16_SNorm,
233 PixelFormat.R16_Typeless,
234 PixelFormat.R16_UInt,
235 PixelFormat.R16_UNorm,
236 PixelFormat.R8G8_SInt,
237 PixelFormat.R8G8_SNorm,
238 PixelFormat.R8G8_Typeless,
239 PixelFormat.R8G8_UInt,
240 PixelFormat.R8G8_UNorm,
242 PixelFormat.B4G4R4A4_UNorm,
247 PixelFormat.B8G8R8X8_Typeless,
248 PixelFormat.B8G8R8X8_UNorm,
249 PixelFormat.B8G8R8X8_UNorm_SRgb,
250 PixelFormat.D24_UNorm_S8_UInt,
251 PixelFormat.D32_Float,
252 PixelFormat.D32_Float_S8X24_UInt,
253 PixelFormat.G8R8_G8B8_UNorm,
254 PixelFormat.R10G10B10_Xr_Bias_A2_UNorm,
255 PixelFormat.R10G10B10A2_Typeless,
256 PixelFormat.R10G10B10A2_UInt,
257 PixelFormat.R10G10B10A2_UNorm,
258 PixelFormat.R11G11B10_Float,
259 PixelFormat.R16G16_Float,
260 PixelFormat.R16G16_SInt,
261 PixelFormat.R16G16_SNorm,
262 PixelFormat.R16G16_Typeless,
263 PixelFormat.R16G16_UInt,
264 PixelFormat.R16G16_UNorm,
265 PixelFormat.R24_UNorm_X8_Typeless,
266 PixelFormat.R24G8_Typeless,
267 PixelFormat.R32_Float,
268 PixelFormat.R32_Float_X8X24_Typeless,
269 PixelFormat.R32_SInt,
270 PixelFormat.R32_Typeless,
271 PixelFormat.R32_UInt,
272 PixelFormat.R8G8_B8G8_UNorm,
273 PixelFormat.R8G8B8A8_SInt,
274 PixelFormat.R8G8B8A8_SNorm,
275 PixelFormat.R8G8B8A8_Typeless,
276 PixelFormat.R8G8B8A8_UInt,
277 PixelFormat.R8G8B8A8_UNorm,
278 PixelFormat.R8G8B8A8_UNorm_SRgb,
279 PixelFormat.B8G8R8A8_Typeless,
280 PixelFormat.B8G8R8A8_UNorm,
281 PixelFormat.B8G8R8A8_UNorm_SRgb,
282 PixelFormat.R9G9B9E5_Sharedexp,
283 PixelFormat.X24_Typeless_G8_UInt,
284 PixelFormat.X32_Typeless_G8X24_UInt,
288 PixelFormat.R16G16B16A16_Float,
289 PixelFormat.R16G16B16A16_SInt,
290 PixelFormat.R16G16B16A16_SNorm,
291 PixelFormat.R16G16B16A16_Typeless,
292 PixelFormat.R16G16B16A16_UInt,
293 PixelFormat.R16G16B16A16_UNorm,
294 PixelFormat.R32G32_Float,
295 PixelFormat.R32G32_SInt,
296 PixelFormat.R32G32_Typeless,
297 PixelFormat.R32G32_UInt,
298 PixelFormat.R32G8X24_Typeless,
302 PixelFormat.R32G32B32_Float,
303 PixelFormat.R32G32B32_SInt,
304 PixelFormat.R32G32B32_Typeless,
305 PixelFormat.R32G32B32_UInt,
309 PixelFormat.R32G32B32A32_Float,
310 PixelFormat.R32G32B32A32_SInt,
311 PixelFormat.R32G32B32A32_Typeless,
312 PixelFormat.R32G32B32A32_UInt,
316 PixelFormat.BC1_Typeless,
317 PixelFormat.BC1_UNorm,
318 PixelFormat.BC1_UNorm_SRgb,
319 PixelFormat.BC4_SNorm,
320 PixelFormat.BC4_Typeless,
321 PixelFormat.BC4_UNorm,
326 PixelFormat.BC2_Typeless,
327 PixelFormat.BC2_UNorm,
328 PixelFormat.BC2_UNorm_SRgb,
329 PixelFormat.BC3_Typeless,
330 PixelFormat.BC3_UNorm,
331 PixelFormat.BC3_UNorm_SRgb,
332 PixelFormat.BC5_SNorm,
333 PixelFormat.BC5_Typeless,
334 PixelFormat.BC5_UNorm,
335 PixelFormat.BC6H_Sf16,
336 PixelFormat.BC6H_Typeless,
337 PixelFormat.BC6H_Uf16,
338 PixelFormat.BC7_Typeless,
339 PixelFormat.BC7_UNorm,
340 PixelFormat.BC7_UNorm_SRgb,
347 PixelFormat.BC1_Typeless,
348 PixelFormat.BC1_UNorm,
349 PixelFormat.BC1_UNorm_SRgb,
350 PixelFormat.BC2_Typeless,
351 PixelFormat.BC2_UNorm,
352 PixelFormat.BC2_UNorm_SRgb,
353 PixelFormat.BC3_Typeless,
354 PixelFormat.BC3_UNorm,
355 PixelFormat.BC3_UNorm_SRgb,
356 PixelFormat.BC4_Typeless,
357 PixelFormat.BC4_UNorm,
358 PixelFormat.BC4_SNorm,
359 PixelFormat.BC5_Typeless,
360 PixelFormat.BC5_UNorm,
361 PixelFormat.BC5_SNorm,
362 PixelFormat.BC6H_Typeless,
363 PixelFormat.BC6H_Uf16,
364 PixelFormat.BC6H_Sf16,
365 PixelFormat.BC7_Typeless,
366 PixelFormat.BC7_UNorm,
367 PixelFormat.BC7_UNorm_SRgb,
368 PixelFormat.PVRTC_2bpp_RGB,
369 PixelFormat.PVRTC_2bpp_RGBA,
370 PixelFormat.PVRTC_4bpp_RGB,
371 PixelFormat.PVRTC_4bpp_RGBA,
372 PixelFormat.PVRTC_II_2bpp,
373 PixelFormat.PVRTC_II_4bpp,
375 PixelFormat.ETC2_RGB,
376 PixelFormat.ETC2_RGBA,
377 PixelFormat.ETC2_RGB_A1,
378 PixelFormat.EAC_R11_Unsigned,
379 PixelFormat.EAC_R11_Signed,
380 PixelFormat.EAC_RG11_Unsigned,
381 PixelFormat.EAC_RG11_Signed,
383 PixelFormat.ATC_RGBA_Explicit,
384 PixelFormat.ATC_RGBA_Interpolated,
385 }, compressedFormats);
390 PixelFormat.R8G8B8A8_UNorm_SRgb,
391 PixelFormat.BC1_UNorm_SRgb,
392 PixelFormat.BC2_UNorm_SRgb,
393 PixelFormat.BC3_UNorm_SRgb,
394 PixelFormat.B8G8R8A8_UNorm_SRgb,
395 PixelFormat.B8G8R8X8_UNorm_SRgb,
396 PixelFormat.BC7_UNorm_SRgb,
402 PixelFormat.R32G32B32A32_Typeless,
403 PixelFormat.R32G32B32_Typeless,
404 PixelFormat.R16G16B16A16_Typeless,
405 PixelFormat.R32G32_Typeless,
406 PixelFormat.R32G8X24_Typeless,
407 PixelFormat.R32_Float_X8X24_Typeless,
408 PixelFormat.X32_Typeless_G8X24_UInt,
409 PixelFormat.R10G10B10A2_Typeless,
410 PixelFormat.R8G8B8A8_Typeless,
411 PixelFormat.R16G16_Typeless,
412 PixelFormat.R32_Typeless,
413 PixelFormat.R24G8_Typeless,
414 PixelFormat.R24_UNorm_X8_Typeless,
415 PixelFormat.X24_Typeless_G8_UInt,
416 PixelFormat.R8G8_Typeless,
417 PixelFormat.R16_Typeless,
418 PixelFormat.R8_Typeless,
419 PixelFormat.BC1_Typeless,
420 PixelFormat.BC2_Typeless,
421 PixelFormat.BC3_Typeless,
422 PixelFormat.BC4_Typeless,
423 PixelFormat.BC5_Typeless,
424 PixelFormat.B8G8R8A8_Typeless,
425 PixelFormat.B8G8R8X8_Typeless,
426 PixelFormat.BC6H_Typeless,
427 PixelFormat.BC7_Typeless,
433 foreach (var format
in formats)
434 sizeOfInBits[GetIndex(format)] = bitCount;
439 foreach (var format
in formats)
440 outputArray[GetIndex(format)] =
true;
_In_ size_t _In_ size_t _In_ DXGI_FORMAT format
PixelFormat
Defines various types of pixel formats.