30 { GUID_WICPixelFormat128bppRGBAFloat, DXGI_FORMAT_R32G32B32A32_FLOAT,
false },
32 { GUID_WICPixelFormat64bppRGBAHalf, DXGI_FORMAT_R16G16B16A16_FLOAT,
false },
33 { GUID_WICPixelFormat64bppRGBA, DXGI_FORMAT_R16G16B16A16_UNORM,
true },
35 { GUID_WICPixelFormat32bppRGBA, DXGI_FORMAT_R8G8B8A8_UNORM,
true },
36 { GUID_WICPixelFormat32bppBGRA, DXGI_FORMAT_B8G8R8A8_UNORM,
true },
37 { GUID_WICPixelFormat32bppBGR, DXGI_FORMAT_B8G8R8X8_UNORM,
true },
39 { GUID_WICPixelFormat32bppRGBA1010102XR, DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM,
true },
40 { GUID_WICPixelFormat32bppRGBA1010102, DXGI_FORMAT_R10G10B10A2_UNORM,
true },
42 { GUID_WICPixelFormat16bppBGRA5551, DXGI_FORMAT_B5G5R5A1_UNORM,
true },
43 { GUID_WICPixelFormat16bppBGR565, DXGI_FORMAT_B5G6R5_UNORM,
true },
45 { GUID_WICPixelFormat32bppGrayFloat, DXGI_FORMAT_R32_FLOAT,
false },
46 { GUID_WICPixelFormat16bppGrayHalf, DXGI_FORMAT_R16_FLOAT,
false },
47 { GUID_WICPixelFormat16bppGray, DXGI_FORMAT_R16_UNORM,
true },
48 { GUID_WICPixelFormat8bppGray, DXGI_FORMAT_R8_UNORM,
true },
50 { GUID_WICPixelFormat8bppAlpha, DXGI_FORMAT_A8_UNORM,
false },
52 { GUID_WICPixelFormatBlackWhite, DXGI_FORMAT_R1_UNORM,
false },
64 _Use_decl_annotations_
67 for(
size_t i=0; i < _countof(g_WICFormats); ++i )
69 if ( memcmp( &g_WICFormats[i].wic, &guid,
sizeof(GUID) ) == 0 )
70 return g_WICFormats[i].
format;
73 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE)
76 if ( memcmp( &GUID_WICPixelFormat96bppRGBFloat, &guid,
sizeof(GUID) ) == 0 )
77 return DXGI_FORMAT_R32G32B32_FLOAT;
81 return DXGI_FORMAT_UNKNOWN;
84 _Use_decl_annotations_
89 case DXGI_FORMAT_R8G8B8A8_UNORM:
90 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
95 memcpy( &guid, &GUID_WICPixelFormat32bppBGRA,
sizeof(GUID) );
99 memcpy( &guid, &GUID_WICPixelFormat32bppRGBA,
sizeof(GUID) );
103 case DXGI_FORMAT_D32_FLOAT:
104 memcpy( &guid, &GUID_WICPixelFormat32bppGrayFloat,
sizeof(GUID) );
107 case DXGI_FORMAT_D16_UNORM:
108 memcpy( &guid, &GUID_WICPixelFormat16bppGray,
sizeof(GUID) );
111 case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
112 memcpy( &guid, &GUID_WICPixelFormat32bppBGRA,
sizeof(GUID) );
115 case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
116 memcpy( &guid, &GUID_WICPixelFormat32bppBGR,
sizeof(GUID) );
119 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE)
120 case DXGI_FORMAT_R32G32B32_FLOAT:
123 memcpy( &guid, &GUID_WICPixelFormat96bppRGBFloat,
sizeof(GUID) );
130 for(
size_t i=0; i < _countof(g_WICFormats); ++i )
132 if ( g_WICFormats[i].format == format )
134 memcpy( &guid, &g_WICFormats[i].wic,
sizeof(GUID) );
141 memcpy( &guid, &GUID_NULL,
sizeof(GUID) );
149 for(
size_t i=0; i < _countof(g_WICFormats); ++i )
151 if ( memcmp( &g_WICFormats[i].wic, &sourceGUID,
sizeof(GUID) ) == 0 )
153 if ( g_WICFormats[i].srgb )
157 if ( memcmp( &g_WICFormats[i].wic, &targetGUID,
sizeof(GUID) ) == 0 )
159 if ( g_WICFormats[i].srgb )
179 static IWICImagingFactory* s_Factory =
nullptr;
184 #if(_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE)
185 HRESULT hr = CoCreateInstance(
186 CLSID_WICImagingFactory2,
188 CLSCTX_INPROC_SERVER,
189 __uuidof(IWICImagingFactory2),
200 hr = CoCreateInstance(
201 CLSID_WICImagingFactory1,
203 CLSCTX_INPROC_SERVER,
204 __uuidof(IWICImagingFactory),
215 HRESULT hr = CoCreateInstance(
216 CLSID_WICImagingFactory,
218 CLSCTX_INPROC_SERVER,
219 __uuidof(IWICImagingFactory),
237 _Use_decl_annotations_
243 return GUID_ContainerFormatBmp;
246 return GUID_ContainerFormatJpeg;
249 return GUID_ContainerFormatPng;
252 return GUID_ContainerFormatTiff;
255 return GUID_ContainerFormatGif;
258 return GUID_ContainerFormatWmp;
261 return GUID_ContainerFormatIco;
276 _Use_decl_annotations_
279 switch( static_cast<int>(fmt) )
281 case DXGI_FORMAT_R32G32B32A32_TYPELESS:
282 case DXGI_FORMAT_R32G32B32A32_FLOAT:
283 case DXGI_FORMAT_R32G32B32A32_UINT:
284 case DXGI_FORMAT_R32G32B32A32_SINT:
287 case DXGI_FORMAT_R32G32B32_TYPELESS:
288 case DXGI_FORMAT_R32G32B32_FLOAT:
289 case DXGI_FORMAT_R32G32B32_UINT:
290 case DXGI_FORMAT_R32G32B32_SINT:
293 case DXGI_FORMAT_R16G16B16A16_TYPELESS:
294 case DXGI_FORMAT_R16G16B16A16_FLOAT:
295 case DXGI_FORMAT_R16G16B16A16_UNORM:
296 case DXGI_FORMAT_R16G16B16A16_UINT:
297 case DXGI_FORMAT_R16G16B16A16_SNORM:
298 case DXGI_FORMAT_R16G16B16A16_SINT:
299 case DXGI_FORMAT_R32G32_TYPELESS:
300 case DXGI_FORMAT_R32G32_FLOAT:
301 case DXGI_FORMAT_R32G32_UINT:
302 case DXGI_FORMAT_R32G32_SINT:
303 case DXGI_FORMAT_R32G8X24_TYPELESS:
304 case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
305 case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
306 case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
307 case DXGI_FORMAT_Y416:
308 case DXGI_FORMAT_Y210:
309 case DXGI_FORMAT_Y216:
312 case DXGI_FORMAT_R10G10B10A2_TYPELESS:
313 case DXGI_FORMAT_R10G10B10A2_UNORM:
314 case DXGI_FORMAT_R10G10B10A2_UINT:
315 case DXGI_FORMAT_R11G11B10_FLOAT:
316 case DXGI_FORMAT_R8G8B8A8_TYPELESS:
317 case DXGI_FORMAT_R8G8B8A8_UNORM:
318 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
319 case DXGI_FORMAT_R8G8B8A8_UINT:
320 case DXGI_FORMAT_R8G8B8A8_SNORM:
321 case DXGI_FORMAT_R8G8B8A8_SINT:
322 case DXGI_FORMAT_R16G16_TYPELESS:
323 case DXGI_FORMAT_R16G16_FLOAT:
324 case DXGI_FORMAT_R16G16_UNORM:
325 case DXGI_FORMAT_R16G16_UINT:
326 case DXGI_FORMAT_R16G16_SNORM:
327 case DXGI_FORMAT_R16G16_SINT:
328 case DXGI_FORMAT_R32_TYPELESS:
329 case DXGI_FORMAT_D32_FLOAT:
330 case DXGI_FORMAT_R32_FLOAT:
331 case DXGI_FORMAT_R32_UINT:
332 case DXGI_FORMAT_R32_SINT:
333 case DXGI_FORMAT_R24G8_TYPELESS:
334 case DXGI_FORMAT_D24_UNORM_S8_UINT:
335 case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
336 case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
337 case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
338 case DXGI_FORMAT_R8G8_B8G8_UNORM:
339 case DXGI_FORMAT_G8R8_G8B8_UNORM:
340 case DXGI_FORMAT_B8G8R8A8_UNORM:
341 case DXGI_FORMAT_B8G8R8X8_UNORM:
342 case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
343 case DXGI_FORMAT_B8G8R8A8_TYPELESS:
344 case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
345 case DXGI_FORMAT_B8G8R8X8_TYPELESS:
346 case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
347 case DXGI_FORMAT_AYUV:
348 case DXGI_FORMAT_Y410:
349 case DXGI_FORMAT_YUY2:
354 case DXGI_FORMAT_P010:
355 case DXGI_FORMAT_P016:
361 case DXGI_FORMAT_R8G8_TYPELESS:
362 case DXGI_FORMAT_R8G8_UNORM:
363 case DXGI_FORMAT_R8G8_UINT:
364 case DXGI_FORMAT_R8G8_SNORM:
365 case DXGI_FORMAT_R8G8_SINT:
366 case DXGI_FORMAT_R16_TYPELESS:
367 case DXGI_FORMAT_R16_FLOAT:
368 case DXGI_FORMAT_D16_UNORM:
369 case DXGI_FORMAT_R16_UNORM:
370 case DXGI_FORMAT_R16_UINT:
371 case DXGI_FORMAT_R16_SNORM:
372 case DXGI_FORMAT_R16_SINT:
373 case DXGI_FORMAT_B5G6R5_UNORM:
374 case DXGI_FORMAT_B5G5R5A1_UNORM:
375 case DXGI_FORMAT_A8P8:
376 case DXGI_FORMAT_B4G4R4A4_UNORM:
379 case DXGI_FORMAT_NV12:
380 case DXGI_FORMAT_420_OPAQUE:
381 case DXGI_FORMAT_NV11:
384 case DXGI_FORMAT_R8_TYPELESS:
385 case DXGI_FORMAT_R8_UNORM:
386 case DXGI_FORMAT_R8_UINT:
387 case DXGI_FORMAT_R8_SNORM:
388 case DXGI_FORMAT_R8_SINT:
389 case DXGI_FORMAT_A8_UNORM:
390 case DXGI_FORMAT_AI44:
391 case DXGI_FORMAT_IA44:
395 case DXGI_FORMAT_R1_UNORM:
398 case DXGI_FORMAT_BC1_TYPELESS:
399 case DXGI_FORMAT_BC1_UNORM:
400 case DXGI_FORMAT_BC1_UNORM_SRGB:
401 case DXGI_FORMAT_BC4_TYPELESS:
402 case DXGI_FORMAT_BC4_UNORM:
403 case DXGI_FORMAT_BC4_SNORM:
406 case DXGI_FORMAT_BC2_TYPELESS:
407 case DXGI_FORMAT_BC2_UNORM:
408 case DXGI_FORMAT_BC2_UNORM_SRGB:
409 case DXGI_FORMAT_BC3_TYPELESS:
410 case DXGI_FORMAT_BC3_UNORM:
411 case DXGI_FORMAT_BC3_UNORM_SRGB:
412 case DXGI_FORMAT_BC5_TYPELESS:
413 case DXGI_FORMAT_BC5_UNORM:
414 case DXGI_FORMAT_BC5_SNORM:
415 case DXGI_FORMAT_BC6H_TYPELESS:
416 case DXGI_FORMAT_BC6H_UF16:
417 case DXGI_FORMAT_BC6H_SF16:
418 case DXGI_FORMAT_BC7_TYPELESS:
419 case DXGI_FORMAT_BC7_UNORM:
420 case DXGI_FORMAT_BC7_UNORM_SRGB:
433 _Use_decl_annotations_
436 switch( static_cast<int>(fmt) )
438 case DXGI_FORMAT_R32G32B32A32_TYPELESS:
439 case DXGI_FORMAT_R32G32B32A32_FLOAT:
440 case DXGI_FORMAT_R32G32B32A32_UINT:
441 case DXGI_FORMAT_R32G32B32A32_SINT:
442 case DXGI_FORMAT_R32G32B32_TYPELESS:
443 case DXGI_FORMAT_R32G32B32_FLOAT:
444 case DXGI_FORMAT_R32G32B32_UINT:
445 case DXGI_FORMAT_R32G32B32_SINT:
446 case DXGI_FORMAT_R32G32_TYPELESS:
447 case DXGI_FORMAT_R32G32_FLOAT:
448 case DXGI_FORMAT_R32G32_UINT:
449 case DXGI_FORMAT_R32G32_SINT:
450 case DXGI_FORMAT_R32G8X24_TYPELESS:
451 case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
452 case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
453 case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
454 case DXGI_FORMAT_R32_TYPELESS:
455 case DXGI_FORMAT_D32_FLOAT:
456 case DXGI_FORMAT_R32_FLOAT:
457 case DXGI_FORMAT_R32_UINT:
458 case DXGI_FORMAT_R32_SINT:
461 case DXGI_FORMAT_R24G8_TYPELESS:
462 case DXGI_FORMAT_D24_UNORM_S8_UINT:
463 case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
464 case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
467 case DXGI_FORMAT_R16G16B16A16_TYPELESS:
468 case DXGI_FORMAT_R16G16B16A16_FLOAT:
469 case DXGI_FORMAT_R16G16B16A16_UNORM:
470 case DXGI_FORMAT_R16G16B16A16_UINT:
471 case DXGI_FORMAT_R16G16B16A16_SNORM:
472 case DXGI_FORMAT_R16G16B16A16_SINT:
473 case DXGI_FORMAT_R16G16_TYPELESS:
474 case DXGI_FORMAT_R16G16_FLOAT:
475 case DXGI_FORMAT_R16G16_UNORM:
476 case DXGI_FORMAT_R16G16_UINT:
477 case DXGI_FORMAT_R16G16_SNORM:
478 case DXGI_FORMAT_R16G16_SINT:
479 case DXGI_FORMAT_R16_TYPELESS:
480 case DXGI_FORMAT_R16_FLOAT:
481 case DXGI_FORMAT_D16_UNORM:
482 case DXGI_FORMAT_R16_UNORM:
483 case DXGI_FORMAT_R16_UINT:
484 case DXGI_FORMAT_R16_SNORM:
485 case DXGI_FORMAT_R16_SINT:
486 case DXGI_FORMAT_BC6H_TYPELESS:
487 case DXGI_FORMAT_BC6H_UF16:
488 case DXGI_FORMAT_BC6H_SF16:
489 case DXGI_FORMAT_Y416:
490 case DXGI_FORMAT_P016:
491 case DXGI_FORMAT_Y216:
494 case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
497 case DXGI_FORMAT_R11G11B10_FLOAT:
500 case DXGI_FORMAT_R10G10B10A2_TYPELESS:
501 case DXGI_FORMAT_R10G10B10A2_UNORM:
502 case DXGI_FORMAT_R10G10B10A2_UINT:
503 case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
504 case DXGI_FORMAT_Y410:
505 case DXGI_FORMAT_P010:
506 case DXGI_FORMAT_Y210:
509 case DXGI_FORMAT_R8G8B8A8_TYPELESS:
510 case DXGI_FORMAT_R8G8B8A8_UNORM:
511 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
512 case DXGI_FORMAT_R8G8B8A8_UINT:
513 case DXGI_FORMAT_R8G8B8A8_SNORM:
514 case DXGI_FORMAT_R8G8B8A8_SINT:
515 case DXGI_FORMAT_R8G8_TYPELESS:
516 case DXGI_FORMAT_R8G8_UNORM:
517 case DXGI_FORMAT_R8G8_UINT:
518 case DXGI_FORMAT_R8G8_SNORM:
519 case DXGI_FORMAT_R8G8_SINT:
520 case DXGI_FORMAT_R8_TYPELESS:
521 case DXGI_FORMAT_R8_UNORM:
522 case DXGI_FORMAT_R8_UINT:
523 case DXGI_FORMAT_R8_SNORM:
524 case DXGI_FORMAT_R8_SINT:
525 case DXGI_FORMAT_A8_UNORM:
526 case DXGI_FORMAT_R8G8_B8G8_UNORM:
527 case DXGI_FORMAT_G8R8_G8B8_UNORM:
528 case DXGI_FORMAT_BC4_TYPELESS:
529 case DXGI_FORMAT_BC4_UNORM:
530 case DXGI_FORMAT_BC4_SNORM:
531 case DXGI_FORMAT_BC5_TYPELESS:
532 case DXGI_FORMAT_BC5_UNORM:
533 case DXGI_FORMAT_BC5_SNORM:
534 case DXGI_FORMAT_B8G8R8A8_UNORM:
535 case DXGI_FORMAT_B8G8R8X8_UNORM:
536 case DXGI_FORMAT_B8G8R8A8_TYPELESS:
537 case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
538 case DXGI_FORMAT_B8G8R8X8_TYPELESS:
539 case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
540 case DXGI_FORMAT_AYUV:
541 case DXGI_FORMAT_NV12:
542 case DXGI_FORMAT_420_OPAQUE:
543 case DXGI_FORMAT_YUY2:
544 case DXGI_FORMAT_NV11:
547 case DXGI_FORMAT_BC7_TYPELESS:
548 case DXGI_FORMAT_BC7_UNORM:
549 case DXGI_FORMAT_BC7_UNORM_SRGB:
552 case DXGI_FORMAT_BC1_TYPELESS:
553 case DXGI_FORMAT_BC1_UNORM:
554 case DXGI_FORMAT_BC1_UNORM_SRGB:
555 case DXGI_FORMAT_BC2_TYPELESS:
556 case DXGI_FORMAT_BC2_UNORM:
557 case DXGI_FORMAT_BC2_UNORM_SRGB:
558 case DXGI_FORMAT_BC3_TYPELESS:
559 case DXGI_FORMAT_BC3_UNORM:
560 case DXGI_FORMAT_BC3_UNORM_SRGB:
561 case DXGI_FORMAT_B5G6R5_UNORM:
564 case DXGI_FORMAT_B5G5R5A1_UNORM:
567 case DXGI_FORMAT_B4G4R4A4_UNORM:
570 case DXGI_FORMAT_R1_UNORM:
584 case DXGI_FORMAT_AI44:
585 case DXGI_FORMAT_IA44:
587 case DXGI_FORMAT_A8P8:
600 _Use_decl_annotations_
602 size_t& rowPitch,
size_t& slicePitch, DWORD
flags )
608 size_t bpb = ( fmt == DXGI_FORMAT_BC1_TYPELESS
609 || fmt == DXGI_FORMAT_BC1_UNORM
610 || fmt == DXGI_FORMAT_BC1_UNORM_SRGB
611 || fmt == DXGI_FORMAT_BC4_TYPELESS
612 || fmt == DXGI_FORMAT_BC4_UNORM
613 || fmt == DXGI_FORMAT_BC4_SNORM) ? 8 : 16;
614 size_t nbw = std::max<size_t>( 1, (width + 3) / 4 );
615 size_t nbh = std::max<size_t>( 1, (height + 3) / 4 );
616 rowPitch = nbw * bpb;
618 slicePitch = rowPitch * nbh;
622 size_t bpe = ( fmt == DXGI_FORMAT_Y210 || fmt == DXGI_FORMAT_Y216 ) ? 8 : 4;
623 rowPitch = ( ( width + 1 ) >> 1 ) * bpe;
625 slicePitch = rowPitch * height;
627 else if ( fmt == DXGI_FORMAT_NV11 )
629 rowPitch = ( ( width + 3 ) >> 2 ) * 4;
632 slicePitch = rowPitch * height * 2;
636 size_t bpe = ( fmt == DXGI_FORMAT_P010 || fmt == DXGI_FORMAT_P016
637 || fmt == DXGI_FORMAT(118 )
638 || fmt == DXGI_FORMAT(119 )
639 || fmt == DXGI_FORMAT(120 ) ) ? 4 : 2;
640 rowPitch = ( ( width + 1 ) >> 1 ) * bpe;
642 slicePitch = rowPitch * ( height + ( ( height + 1 ) >> 1 ) );
661 rowPitch = ( ( width * bpp + 31 ) / 32 ) *
sizeof(uint32_t);
662 slicePitch = rowPitch * height;
666 rowPitch = ( ( width * bpp + 127 ) / 128 ) * 16;
667 slicePitch = rowPitch * height;
671 rowPitch = ( width * bpp + 7 ) / 8;
672 slicePitch = rowPitch * height;
681 _Use_decl_annotations_
686 case DXGI_FORMAT_R8G8B8A8_UNORM:
687 return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
689 case DXGI_FORMAT_BC1_UNORM:
690 return DXGI_FORMAT_BC1_UNORM_SRGB;
692 case DXGI_FORMAT_BC2_UNORM:
693 return DXGI_FORMAT_BC2_UNORM_SRGB;
695 case DXGI_FORMAT_BC3_UNORM:
696 return DXGI_FORMAT_BC3_UNORM_SRGB;
698 case DXGI_FORMAT_B8G8R8A8_UNORM:
699 return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
701 case DXGI_FORMAT_B8G8R8X8_UNORM:
702 return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
704 case DXGI_FORMAT_BC7_UNORM:
705 return DXGI_FORMAT_BC7_UNORM_SRGB;
716 _Use_decl_annotations_
721 case DXGI_FORMAT_R32G32B32A32_FLOAT:
722 case DXGI_FORMAT_R32G32B32A32_UINT:
723 case DXGI_FORMAT_R32G32B32A32_SINT:
724 return DXGI_FORMAT_R32G32B32A32_TYPELESS;
726 case DXGI_FORMAT_R32G32B32_FLOAT:
727 case DXGI_FORMAT_R32G32B32_UINT:
728 case DXGI_FORMAT_R32G32B32_SINT:
729 return DXGI_FORMAT_R32G32B32_TYPELESS;
731 case DXGI_FORMAT_R16G16B16A16_FLOAT:
732 case DXGI_FORMAT_R16G16B16A16_UNORM:
733 case DXGI_FORMAT_R16G16B16A16_UINT:
734 case DXGI_FORMAT_R16G16B16A16_SNORM:
735 case DXGI_FORMAT_R16G16B16A16_SINT:
736 return DXGI_FORMAT_R16G16B16A16_TYPELESS;
738 case DXGI_FORMAT_R32G32_FLOAT:
739 case DXGI_FORMAT_R32G32_UINT:
740 case DXGI_FORMAT_R32G32_SINT:
741 return DXGI_FORMAT_R32G32_TYPELESS;
743 case DXGI_FORMAT_R10G10B10A2_UNORM:
744 case DXGI_FORMAT_R10G10B10A2_UINT:
745 return DXGI_FORMAT_R10G10B10A2_TYPELESS;
747 case DXGI_FORMAT_R8G8B8A8_UNORM:
748 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
749 case DXGI_FORMAT_R8G8B8A8_UINT:
750 case DXGI_FORMAT_R8G8B8A8_SNORM:
751 case DXGI_FORMAT_R8G8B8A8_SINT:
752 return DXGI_FORMAT_R8G8B8A8_TYPELESS;
754 case DXGI_FORMAT_R16G16_FLOAT:
755 case DXGI_FORMAT_R16G16_UNORM:
756 case DXGI_FORMAT_R16G16_UINT:
757 case DXGI_FORMAT_R16G16_SNORM:
758 case DXGI_FORMAT_R16G16_SINT:
759 return DXGI_FORMAT_R16G16_TYPELESS;
761 case DXGI_FORMAT_D32_FLOAT:
762 case DXGI_FORMAT_R32_FLOAT:
763 case DXGI_FORMAT_R32_UINT:
764 case DXGI_FORMAT_R32_SINT:
765 return DXGI_FORMAT_R32_TYPELESS;
767 case DXGI_FORMAT_R8G8_UNORM:
768 case DXGI_FORMAT_R8G8_UINT:
769 case DXGI_FORMAT_R8G8_SNORM:
770 case DXGI_FORMAT_R8G8_SINT:
771 return DXGI_FORMAT_R8G8_TYPELESS;
773 case DXGI_FORMAT_R16_FLOAT:
774 case DXGI_FORMAT_D16_UNORM:
775 case DXGI_FORMAT_R16_UNORM:
776 case DXGI_FORMAT_R16_UINT:
777 case DXGI_FORMAT_R16_SNORM:
778 case DXGI_FORMAT_R16_SINT:
779 return DXGI_FORMAT_R16_TYPELESS;
781 case DXGI_FORMAT_R8_UNORM:
782 case DXGI_FORMAT_R8_UINT:
783 case DXGI_FORMAT_R8_SNORM:
784 case DXGI_FORMAT_R8_SINT:
785 case DXGI_FORMAT_A8_UNORM:
786 return DXGI_FORMAT_R8_TYPELESS;
788 case DXGI_FORMAT_BC1_UNORM:
789 case DXGI_FORMAT_BC1_UNORM_SRGB:
790 return DXGI_FORMAT_BC1_TYPELESS;
792 case DXGI_FORMAT_BC2_UNORM:
793 case DXGI_FORMAT_BC2_UNORM_SRGB:
794 return DXGI_FORMAT_BC2_TYPELESS;
796 case DXGI_FORMAT_BC3_UNORM:
797 case DXGI_FORMAT_BC3_UNORM_SRGB:
798 return DXGI_FORMAT_BC3_TYPELESS;
800 case DXGI_FORMAT_BC4_UNORM:
801 case DXGI_FORMAT_BC4_SNORM:
802 return DXGI_FORMAT_BC4_TYPELESS;
804 case DXGI_FORMAT_BC5_UNORM:
805 case DXGI_FORMAT_BC5_SNORM:
806 return DXGI_FORMAT_BC5_TYPELESS;
808 case DXGI_FORMAT_B8G8R8A8_UNORM:
809 case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
810 return DXGI_FORMAT_B8G8R8A8_TYPELESS;
812 case DXGI_FORMAT_B8G8R8X8_UNORM:
813 case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
814 return DXGI_FORMAT_B8G8R8X8_TYPELESS;
816 case DXGI_FORMAT_BC6H_UF16:
817 case DXGI_FORMAT_BC6H_SF16:
818 return DXGI_FORMAT_BC6H_TYPELESS;
820 case DXGI_FORMAT_BC7_UNORM:
821 case DXGI_FORMAT_BC7_UNORM_SRGB:
822 return DXGI_FORMAT_BC7_TYPELESS;
833 _Use_decl_annotations_
838 case DXGI_FORMAT_R16G16B16A16_TYPELESS:
839 return DXGI_FORMAT_R16G16B16A16_UNORM;
841 case DXGI_FORMAT_R10G10B10A2_TYPELESS:
842 return DXGI_FORMAT_R10G10B10A2_UNORM;
844 case DXGI_FORMAT_R8G8B8A8_TYPELESS:
845 return DXGI_FORMAT_R8G8B8A8_UNORM;
847 case DXGI_FORMAT_R16G16_TYPELESS:
848 return DXGI_FORMAT_R16G16_UNORM;
850 case DXGI_FORMAT_R8G8_TYPELESS:
851 return DXGI_FORMAT_R8G8_UNORM;
853 case DXGI_FORMAT_R16_TYPELESS:
854 return DXGI_FORMAT_R16_UNORM;
856 case DXGI_FORMAT_R8_TYPELESS:
857 return DXGI_FORMAT_R8_UNORM;
859 case DXGI_FORMAT_BC1_TYPELESS:
860 return DXGI_FORMAT_BC1_UNORM;
862 case DXGI_FORMAT_BC2_TYPELESS:
863 return DXGI_FORMAT_BC2_UNORM;
865 case DXGI_FORMAT_BC3_TYPELESS:
866 return DXGI_FORMAT_BC3_UNORM;
868 case DXGI_FORMAT_BC4_TYPELESS:
869 return DXGI_FORMAT_BC4_UNORM;
871 case DXGI_FORMAT_BC5_TYPELESS:
872 return DXGI_FORMAT_BC5_UNORM;
874 case DXGI_FORMAT_B8G8R8A8_TYPELESS:
875 return DXGI_FORMAT_B8G8R8A8_UNORM;
877 case DXGI_FORMAT_B8G8R8X8_TYPELESS:
878 return DXGI_FORMAT_B8G8R8X8_UNORM;
880 case DXGI_FORMAT_BC7_TYPELESS:
881 return DXGI_FORMAT_BC7_UNORM;
892 _Use_decl_annotations_
897 case DXGI_FORMAT_R32G32B32A32_TYPELESS:
898 return DXGI_FORMAT_R32G32B32A32_FLOAT;
900 case DXGI_FORMAT_R32G32B32_TYPELESS:
901 return DXGI_FORMAT_R32G32B32_FLOAT;
903 case DXGI_FORMAT_R16G16B16A16_TYPELESS:
904 return DXGI_FORMAT_R16G16B16A16_FLOAT;
906 case DXGI_FORMAT_R32G32_TYPELESS:
907 return DXGI_FORMAT_R32G32_FLOAT;
909 case DXGI_FORMAT_R16G16_TYPELESS:
910 return DXGI_FORMAT_R16G16_FLOAT;
912 case DXGI_FORMAT_R32_TYPELESS:
913 return DXGI_FORMAT_R32_FLOAT;
915 case DXGI_FORMAT_R16_TYPELESS:
916 return DXGI_FORMAT_R16_FLOAT;
928 _Use_decl_annotations_
957 for(
size_t level = 0; level < mip; ++level )
985 if (
this != &moveFrom )
989 _buffer = moveFrom._buffer;
990 _size = moveFrom._size;
992 moveFrom._buffer =
nullptr;
1002 _aligned_free( _buffer );
1009 _Use_decl_annotations_
1013 return E_INVALIDARG;
1017 _buffer = _aligned_malloc( size, 16 );
1021 return E_OUTOFMEMORY;
size_t BitsPerColor(_In_ DXGI_FORMAT fmt)
bool IsPlanar(_In_ DXGI_FORMAT fmt)
_In_ size_t _In_ DXGI_FORMAT _In_ size_t _In_ DXGI_FORMAT _In_ DWORD flags
bool IsPacked(_In_ DXGI_FORMAT fmt)
size_t _In_ DXGI_FORMAT size_t _In_ TEXP_LEGACY_FORMAT _In_ DWORD flags assert(pDestination &&outSize > 0)
HRESULT Initialize(_In_ size_t size)
IWICImagingFactory * _GetWIC()
bool IsCompressed(_In_ DXGI_FORMAT fmt)
void ComputePitch(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _Out_ size_t &rowPitch, _Out_ size_t &slicePitch, _In_ DWORD flags=CP_FLAGS_NONE)
DXGI_FORMAT MakeTypelessUNORM(_In_ DXGI_FORMAT fmt)
bool IsValid(_In_ DXGI_FORMAT fmt)
DWORD _CheckWICColorSpace(_In_ const GUID &sourceGUID, _In_ const GUID &targetGUID)
DXGI_FORMAT MakeSRGB(_In_ DXGI_FORMAT fmt)
DXGI_FORMAT MakeTypelessFLOAT(_In_ DXGI_FORMAT fmt)
REFGUID GetWICCodec(_In_ WICCodecs codec)
DXGI_FORMAT MakeTypeless(_In_ DXGI_FORMAT fmt)
DXGI_FORMAT _WICToDXGI(_In_ const GUID &guid)
_In_ size_t _In_ size_t _In_ DXGI_FORMAT format
bool _DXGIToWIC(_In_ DXGI_FORMAT format, _Out_ GUID &guid, _In_ bool ignoreRGBvsBGR=false)
size_t BitsPerPixel(_In_ DXGI_FORMAT fmt)
_In_ size_t _In_ size_t size
Blob & operator=(Blob &&moveFrom)
static WICTranslate g_WICFormats[]