4
4
#include "nbl/builtin/hlsl/format/shared_exp.hlsl"
5
5
#include "nbl/builtin/hlsl/format/octahedral.hlsl"
6
6
#include "nbl/builtin/hlsl/type_traits.hlsl"
7
+ #include "nbl/builtin/hlsl/cpp_compat/basic.h"
7
8
8
9
namespace nbl
9
10
{
@@ -292,7 +293,9 @@ struct view_class_traits<BlockViewClass::CLASS> \
292
293
}
293
294
SPECIALIZE_CLASS (SIZE_8_BIT,R8_UINT,1 ,1 );
294
295
SPECIALIZE_CLASS (SIZE_16_BIT,R16_UINT,2 ,2 );
296
+ SPECIALIZE_CLASS (SIZE_24_BIT,R8G8B8_UINT,3 ,1 );
295
297
SPECIALIZE_CLASS (SIZE_32_BIT,R32_UINT,4 ,4 );
298
+ SPECIALIZE_CLASS (SIZE_48_BIT,R16G16B16_UINT,6 ,2 );
296
299
SPECIALIZE_CLASS (SIZE_64_BIT,R32G32_UINT,8 ,4 );
297
300
SPECIALIZE_CLASS (SIZE_96_BIT,R32G32B32_UINT,12 ,4 );
298
301
SPECIALIZE_CLASS (SIZE_128_BIT,R32G32B32A32_UINT,16 ,4 );
@@ -347,10 +350,9 @@ struct block_traits
347
350
struct block_traits<TexelBlockFormat::FORMAT> \
348
351
{ \
349
352
using class_traits_t = view_class_traits<BlockViewClass::CLASS>; \
350
- NBL_CONSTEXPR_STATIC_INLINE class_traits_t ClassTraits; \
351
353
NBL_CONSTEXPR_STATIC_INLINE const std::type_info* DecodeTypeID = &typeid (float ); \
352
354
NBL_CONSTEXPR_STATIC_INLINE TexelKind Kind = KIND; \
353
- NBL_CONSTEXPR_STATIC_INLINE TexelAttributes Attributes = ATTRS; \
355
+ NBL_CONSTEXPR_STATIC_INLINE TexelAttributes Attributes = TexelAttributes ( ATTRS) ; \
354
356
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeX = W; \
355
357
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeY = H; \
356
358
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeZ = D; \
@@ -361,22 +363,141 @@ struct block_traits<TexelBlockFormat::FORMAT> \
361
363
struct block_traits<TexelBlockFormat::FORMAT> \
362
364
{ \
363
365
using class_traits_t = view_class_traits<BlockViewClass::CLASS>; \
364
- NBL_CONSTEXPR_STATIC_INLINE class_traits_t ClassTraits; \
365
366
NBL_CONSTEXPR_STATIC_INLINE uint32_t DecodeTypeID = impl::typeid_t<float >::value; \
366
367
NBL_CONSTEXPR_STATIC_INLINE TexelKind Kind = KIND; \
367
- NBL_CONSTEXPR_STATIC_INLINE TexelAttributes Attributes = ATTRS; \
368
+ NBL_CONSTEXPR_STATIC_INLINE TexelAttributes Attributes = TexelAttributes ( ATTRS) ; \
368
369
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeX = W; \
369
370
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeY = H; \
370
371
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeZ = D; \
371
372
NBL_CONSTEXPR_STATIC_INLINE uint32_t Channels = C; \
372
373
}
373
374
#endif
374
375
//SPECIALIZE_FORMAT(D16_UNORM,BVC_UNKNOWN,Normalized,HasDepthBit,1,1,1,1);
375
- // TODO: now do the rest
376
+ // TODO: depth and stencil formats
376
377
SPECIALIZE_FORMAT (R4G4_UNORM_PACK8,SIZE_8_BIT,Normalized,None ,1 ,1 ,1 ,2 );
377
- // TODO: now do the rest
378
- SPECIALIZE_FORMAT (B8G8R8A8_SRGB,SIZE_32_BIT,SRGB,None ,1 ,1 ,1 ,4 );
379
- // TODO: now do the rest
378
+ SPECIALIZE_FORMAT (R4G4B4A4_UNORM_PACK16,SIZE_16_BIT,Normalized,None ,1 ,1 ,1 ,4 );
379
+ SPECIALIZE_FORMAT (B4G4R4A4_UNORM_PACK16,SIZE_16_BIT,Normalized,BGRABit,1 ,1 ,1 ,4 );
380
+ SPECIALIZE_FORMAT (R5G6B5_UNORM_PACK16,SIZE_16_BIT,Normalized,None ,1 ,1 ,1 ,3 );
381
+ SPECIALIZE_FORMAT (B5G6R5_UNORM_PACK16,SIZE_16_BIT,Normalized,BGRABit,1 ,1 ,1 ,3 );
382
+ SPECIALIZE_FORMAT (R5G5B5A1_UNORM_PACK16,SIZE_16_BIT,Normalized,None ,1 ,1 ,1 ,4 );
383
+ SPECIALIZE_FORMAT (B5G5R5A1_UNORM_PACK16,SIZE_16_BIT,Normalized,BGRABit,1 ,1 ,1 ,4 );
384
+ SPECIALIZE_FORMAT (A1R5G5B5_UNORM_PACK16,SIZE_16_BIT,Normalized,BGRABit,1 ,1 ,1 ,4 );
385
+ SPECIALIZE_FORMAT (R8_UNORM,SIZE_8_BIT,Normalized,None ,1 ,1 ,1 ,1 );
386
+ SPECIALIZE_FORMAT (R8_SNORM,SIZE_8_BIT,Normalized,SignedBit,1 ,1 ,1 ,1 );
387
+ SPECIALIZE_FORMAT (R8_USCALED,SIZE_8_BIT,Scaled,None ,1 ,1 ,1 ,1 );
388
+ SPECIALIZE_FORMAT (R8_SSCALED,SIZE_8_BIT,Scaled,SignedBit,1 ,1 ,1 ,1 );
389
+ SPECIALIZE_FORMAT (R8_UINT,SIZE_8_BIT,Integer,None ,1 ,1 ,1 ,1 );
390
+ SPECIALIZE_FORMAT (R8_SINT,SIZE_8_BIT,Integer,SignedBit,1 ,1 ,1 ,1 );
391
+ SPECIALIZE_FORMAT (R8_SRGB,SIZE_8_BIT,SRGB,None ,1 ,1 ,1 ,1 );
392
+ SPECIALIZE_FORMAT (R8G8_UNORM,SIZE_16_BIT,Normalized,None ,1 ,1 ,1 ,2 );
393
+ SPECIALIZE_FORMAT (R8G8_SNORM,SIZE_16_BIT,Normalized,SignedBit,1 ,1 ,1 ,2 );
394
+ SPECIALIZE_FORMAT (R8G8_USCALED,SIZE_16_BIT,Scaled,None ,1 ,1 ,1 ,2 );
395
+ SPECIALIZE_FORMAT (R8G8_SSCALED,SIZE_16_BIT,Scaled,SignedBit,1 ,1 ,1 ,2 );
396
+ SPECIALIZE_FORMAT (R8G8_UINT,SIZE_16_BIT,Integer,None ,1 ,1 ,1 ,2 );
397
+ SPECIALIZE_FORMAT (R8G8_SINT,SIZE_16_BIT,Integer,SignedBit,1 ,1 ,1 ,2 );
398
+ SPECIALIZE_FORMAT (R8G8_SRGB,SIZE_16_BIT,SRGB,None ,1 ,1 ,1 ,2 );
399
+ SPECIALIZE_FORMAT (R8G8B8_UNORM,SIZE_24_BIT,Normalized,None ,1 ,1 ,1 ,3 );
400
+ SPECIALIZE_FORMAT (R8G8B8_SNORM,SIZE_24_BIT,Normalized,SignedBit,1 ,1 ,1 ,3 );
401
+ SPECIALIZE_FORMAT (R8G8B8_USCALED,SIZE_24_BIT,Scaled,None ,1 ,1 ,1 ,3 );
402
+ SPECIALIZE_FORMAT (R8G8B8_SSCALED,SIZE_24_BIT,Scaled,SignedBit,1 ,1 ,1 ,3 );
403
+ SPECIALIZE_FORMAT (R8G8B8_UINT,SIZE_24_BIT,Integer,None ,1 ,1 ,1 ,3 );
404
+ SPECIALIZE_FORMAT (R8G8B8_SINT,SIZE_24_BIT,Integer,SignedBit,1 ,1 ,1 ,3 );
405
+ SPECIALIZE_FORMAT (R8G8B8_SRGB,SIZE_24_BIT,SRGB,None ,1 ,1 ,1 ,3 );
406
+ SPECIALIZE_FORMAT (B8G8R8_UNORM,SIZE_24_BIT,Normalized,BGRABit,1 ,1 ,1 ,3 );
407
+ SPECIALIZE_FORMAT (B8G8R8_SNORM,SIZE_24_BIT,Normalized,SignedBit|BGRABit,1 ,1 ,1 ,3 );
408
+ SPECIALIZE_FORMAT (B8G8R8_USCALED,SIZE_24_BIT,Scaled,BGRABit,1 ,1 ,1 ,3 );
409
+ SPECIALIZE_FORMAT (B8G8R8_SSCALED,SIZE_24_BIT,Scaled,SignedBit|BGRABit,1 ,1 ,1 ,3 );
410
+ SPECIALIZE_FORMAT (B8G8R8_UINT,SIZE_24_BIT,Integer,BGRABit,1 ,1 ,1 ,3 );
411
+ SPECIALIZE_FORMAT (B8G8R8_SINT,SIZE_24_BIT,Integer,SignedBit|BGRABit,1 ,1 ,1 ,3 );
412
+ SPECIALIZE_FORMAT (B8G8R8_SRGB,SIZE_24_BIT,SRGB,BGRABit,1 ,1 ,1 ,3 );
413
+ SPECIALIZE_FORMAT (R8G8B8A8_UNORM,SIZE_32_BIT,Normalized,None ,1 ,1 ,1 ,4 );
414
+ SPECIALIZE_FORMAT (R8G8B8A8_SNORM,SIZE_32_BIT,Normalized,SignedBit,1 ,1 ,1 ,4 );
415
+ SPECIALIZE_FORMAT (R8G8B8A8_USCALED,SIZE_32_BIT,Scaled,None ,1 ,1 ,1 ,4 );
416
+ SPECIALIZE_FORMAT (R8G8B8A8_SSCALED,SIZE_32_BIT,Scaled,SignedBit,1 ,1 ,1 ,4 );
417
+ SPECIALIZE_FORMAT (R8G8B8A8_UINT,SIZE_32_BIT,Integer,None ,1 ,1 ,1 ,4 );
418
+ SPECIALIZE_FORMAT (R8G8B8A8_SINT,SIZE_32_BIT,Integer,SignedBit,1 ,1 ,1 ,4 );
419
+ SPECIALIZE_FORMAT (R8G8B8A8_SRGB,SIZE_32_BIT,SRGB,None ,1 ,1 ,1 ,4 );
420
+ SPECIALIZE_FORMAT (B8G8R8A8_UNORM,SIZE_32_BIT,Normalized,BGRABit,1 ,1 ,1 ,4 );
421
+ SPECIALIZE_FORMAT (B8G8R8A8_SNORM,SIZE_32_BIT,Normalized,SignedBit|BGRABit,1 ,1 ,1 ,4 );
422
+ SPECIALIZE_FORMAT (B8G8R8A8_USCALED,SIZE_32_BIT,Scaled,BGRABit,1 ,1 ,1 ,4 );
423
+ SPECIALIZE_FORMAT (B8G8R8A8_SSCALED,SIZE_32_BIT,Scaled,SignedBit|BGRABit,1 ,1 ,1 ,4 );
424
+ SPECIALIZE_FORMAT (B8G8R8A8_UINT,SIZE_32_BIT,Integer,BGRABit,1 ,1 ,1 ,4 );
425
+ SPECIALIZE_FORMAT (B8G8R8A8_SINT,SIZE_32_BIT,Integer,SignedBit|BGRABit,1 ,1 ,1 ,4 );
426
+ SPECIALIZE_FORMAT (B8G8R8A8_SRGB,SIZE_32_BIT,SRGB,BGRABit,1 ,1 ,1 ,4 );
427
+ SPECIALIZE_FORMAT (A8B8G8R8_UNORM_PACK32,SIZE_32_BIT,Normalized,BGRABit,1 ,1 ,1 ,4 );
428
+ SPECIALIZE_FORMAT (A8B8G8R8_SNORM_PACK32,SIZE_32_BIT,Normalized,SignedBit|BGRABit,1 ,1 ,1 ,4 );
429
+ SPECIALIZE_FORMAT (A8B8G8R8_USCALED_PACK32,SIZE_32_BIT,Scaled,BGRABit,1 ,1 ,1 ,4 );
430
+ SPECIALIZE_FORMAT (A8B8G8R8_SSCALED_PACK32,SIZE_32_BIT,Scaled,SignedBit|BGRABit,1 ,1 ,1 ,4 );
431
+ SPECIALIZE_FORMAT (A8B8G8R8_UINT_PACK32,SIZE_32_BIT,Integer,BGRABit,1 ,1 ,1 ,4 );
432
+ SPECIALIZE_FORMAT (A8B8G8R8_SINT_PACK32,SIZE_32_BIT,Integer,SignedBit|BGRABit,1 ,1 ,1 ,4 );
433
+ SPECIALIZE_FORMAT (A8B8G8R8_SRGB_PACK32,SIZE_32_BIT,SRGB,BGRABit,1 ,1 ,1 ,4 );
434
+ SPECIALIZE_FORMAT (A2R10G10B10_UNORM_PACK32,SIZE_32_BIT,Normalized,None ,1 ,1 ,1 ,4 );
435
+ SPECIALIZE_FORMAT (A2R10G10B10_SNORM_PACK32,SIZE_32_BIT,Normalized,SignedBit,1 ,1 ,1 ,4 );
436
+ SPECIALIZE_FORMAT (A2R10G10B10_USCALED_PACK32,SIZE_32_BIT,Scaled,None ,1 ,1 ,1 ,4 );
437
+ SPECIALIZE_FORMAT (A2R10G10B10_SSCALED_PACK32,SIZE_32_BIT,Scaled,SignedBit,1 ,1 ,1 ,4 );
438
+ SPECIALIZE_FORMAT (A2R10G10B10_UINT_PACK32,SIZE_32_BIT,Integer,None ,1 ,1 ,1 ,4 );
439
+ SPECIALIZE_FORMAT (A2R10G10B10_SINT_PACK32,SIZE_32_BIT,Integer,SignedBit,1 ,1 ,1 ,4 );
440
+ SPECIALIZE_FORMAT (A2B10G10R10_UNORM_PACK32,SIZE_32_BIT,Normalized,BGRABit,1 ,1 ,1 ,4 );
441
+ SPECIALIZE_FORMAT (A2B10G10R10_SNORM_PACK32,SIZE_32_BIT,Normalized,SignedBit|BGRABit,1 ,1 ,1 ,4 );
442
+ SPECIALIZE_FORMAT (A2B10G10R10_USCALED_PACK32,SIZE_32_BIT,Scaled,BGRABit,1 ,1 ,1 ,4 );
443
+ SPECIALIZE_FORMAT (A2B10G10R10_SSCALED_PACK32,SIZE_32_BIT,Scaled,SignedBit|BGRABit,1 ,1 ,1 ,4 );
444
+ SPECIALIZE_FORMAT (A2B10G10R10_UINT_PACK32,SIZE_32_BIT,Integer,BGRABit,1 ,1 ,1 ,4 );
445
+ SPECIALIZE_FORMAT (A2B10G10R10_SINT_PACK32,SIZE_32_BIT,Integer,SignedBit|BGRABit,1 ,1 ,1 ,4 );
446
+ SPECIALIZE_FORMAT (R16_UNORM,SIZE_16_BIT,Normalized,None ,1 ,1 ,1 ,1 );
447
+ SPECIALIZE_FORMAT (R16_SNORM,SIZE_16_BIT,Normalized,SignedBit,1 ,1 ,1 ,1 );
448
+ SPECIALIZE_FORMAT (R16_USCALED,SIZE_16_BIT,Scaled,None ,1 ,1 ,1 ,1 );
449
+ SPECIALIZE_FORMAT (R16_SSCALED,SIZE_16_BIT,Scaled,SignedBit,1 ,1 ,1 ,1 );
450
+ SPECIALIZE_FORMAT (R16_UINT,SIZE_16_BIT,Integer,None ,1 ,1 ,1 ,1 );
451
+ SPECIALIZE_FORMAT (R16_SINT,SIZE_16_BIT,Integer,SignedBit,1 ,1 ,1 ,1 );
452
+ SPECIALIZE_FORMAT (R16_SFLOAT,SIZE_16_BIT,Float,SignedBit,1 ,1 ,1 ,1 );
453
+ SPECIALIZE_FORMAT (R16G16_UNORM,SIZE_32_BIT,Normalized,None ,1 ,1 ,1 ,2 );
454
+ SPECIALIZE_FORMAT (R16G16_SNORM,SIZE_32_BIT,Normalized,SignedBit,1 ,1 ,1 ,2 );
455
+ SPECIALIZE_FORMAT (R16G16_USCALED,SIZE_32_BIT,Scaled,None ,1 ,1 ,1 ,2 );
456
+ SPECIALIZE_FORMAT (R16G16_SSCALED,SIZE_32_BIT,Scaled,SignedBit,1 ,1 ,1 ,2 );
457
+ SPECIALIZE_FORMAT (R16G16_UINT,SIZE_32_BIT,Integer,None ,1 ,1 ,1 ,2 );
458
+ SPECIALIZE_FORMAT (R16G16_SINT,SIZE_32_BIT,Integer,SignedBit,1 ,1 ,1 ,2 );
459
+ SPECIALIZE_FORMAT (R16G16_SFLOAT,SIZE_32_BIT,Float,SignedBit,1 ,1 ,1 ,2 );
460
+ SPECIALIZE_FORMAT (R16G16B16_UNORM,SIZE_48_BIT,Normalized,None ,1 ,1 ,1 ,3 );
461
+ SPECIALIZE_FORMAT (R16G16B16_SNORM,SIZE_48_BIT,Normalized,SignedBit,1 ,1 ,1 ,3 );
462
+ SPECIALIZE_FORMAT (R16G16B16_USCALED,SIZE_48_BIT,Scaled,None ,1 ,1 ,1 ,3 );
463
+ SPECIALIZE_FORMAT (R16G16B16_SSCALED,SIZE_48_BIT,Scaled,SignedBit,1 ,1 ,1 ,3 );
464
+ SPECIALIZE_FORMAT (R16G16B16_UINT,SIZE_48_BIT,Integer,None ,1 ,1 ,1 ,3 );
465
+ SPECIALIZE_FORMAT (R16G16B16_SINT,SIZE_48_BIT,Integer,SignedBit,1 ,1 ,1 ,3 );
466
+ SPECIALIZE_FORMAT (R16G16B16_SFLOAT,SIZE_48_BIT,Float,SignedBit,1 ,1 ,1 ,3 );
467
+ SPECIALIZE_FORMAT (R16G16B16A16_UNORM,SIZE_64_BIT,Normalized,None ,1 ,1 ,1 ,4 );
468
+ SPECIALIZE_FORMAT (R16G16B16A16_SNORM,SIZE_64_BIT,Normalized,SignedBit,1 ,1 ,1 ,4 );
469
+ SPECIALIZE_FORMAT (R16G16B16A16_USCALED,SIZE_64_BIT,Scaled,None ,1 ,1 ,1 ,4 );
470
+ SPECIALIZE_FORMAT (R16G16B16A16_SSCALED,SIZE_64_BIT,Scaled,SignedBit,1 ,1 ,1 ,4 );
471
+ SPECIALIZE_FORMAT (R16G16B16A16_UINT,SIZE_64_BIT,Integer,None ,1 ,1 ,1 ,4 );
472
+ SPECIALIZE_FORMAT (R16G16B16A16_SINT,SIZE_64_BIT,Integer,SignedBit,1 ,1 ,1 ,4 );
473
+ SPECIALIZE_FORMAT (R16G16B16A16_SFLOAT,SIZE_64_BIT,Float,SignedBit,1 ,1 ,1 ,4 );
474
+ SPECIALIZE_FORMAT (R32_UINT,SIZE_32_BIT,Integer,None ,1 ,1 ,1 ,1 );
475
+ SPECIALIZE_FORMAT (R32_SINT,SIZE_32_BIT,Integer,SignedBit,1 ,1 ,1 ,1 );
476
+ SPECIALIZE_FORMAT (R32_SFLOAT,SIZE_32_BIT,Float,SignedBit,1 ,1 ,1 ,1 );
477
+ SPECIALIZE_FORMAT (R32G32_UINT,SIZE_64_BIT,Integer,None ,1 ,1 ,1 ,2 );
478
+ SPECIALIZE_FORMAT (R32G32_SINT,SIZE_64_BIT,Integer,SignedBit,1 ,1 ,1 ,2 );
479
+ SPECIALIZE_FORMAT (R32G32_SFLOAT,SIZE_64_BIT,Float,SignedBit,1 ,1 ,1 ,2 );
480
+ SPECIALIZE_FORMAT (R32G32B32_UINT,SIZE_96_BIT,Integer,None ,1 ,1 ,1 ,3 );
481
+ SPECIALIZE_FORMAT (R32G32B32_SINT,SIZE_96_BIT,Integer,SignedBit,1 ,1 ,1 ,3 );
482
+ SPECIALIZE_FORMAT (R32G32B32_SFLOAT,SIZE_96_BIT,Float,SignedBit,1 ,1 ,1 ,3 );
483
+ SPECIALIZE_FORMAT (R32G32B32A32_UINT,SIZE_128_BIT,Integer,None ,1 ,1 ,1 ,4 );
484
+ SPECIALIZE_FORMAT (R32G32B32A32_SINT,SIZE_128_BIT,Integer,SignedBit,1 ,1 ,1 ,4 );
485
+ SPECIALIZE_FORMAT (R32G32B32A32_SFLOAT,SIZE_128_BIT,Float,SignedBit,1 ,1 ,1 ,4 );
486
+ SPECIALIZE_FORMAT (R64_UINT,SIZE_64_BIT,Integer,None ,1 ,1 ,1 ,1 );
487
+ SPECIALIZE_FORMAT (R64_SINT,SIZE_64_BIT,Integer,SignedBit,1 ,1 ,1 ,1 );
488
+ SPECIALIZE_FORMAT (R64_SFLOAT,SIZE_64_BIT,Float,SignedBit,1 ,1 ,1 ,1 );
489
+ SPECIALIZE_FORMAT (R64G64_UINT,SIZE_128_BIT,Integer,None ,1 ,1 ,1 ,2 );
490
+ SPECIALIZE_FORMAT (R64G64_SINT,SIZE_128_BIT,Integer,SignedBit,1 ,1 ,1 ,2 );
491
+ SPECIALIZE_FORMAT (R64G64_SFLOAT,SIZE_128_BIT,Float,SignedBit,1 ,1 ,1 ,2 );
492
+ SPECIALIZE_FORMAT (R64G64B64_UINT,SIZE_192_BIT,Integer,None ,1 ,1 ,1 ,3 );
493
+ SPECIALIZE_FORMAT (R64G64B64_SINT,SIZE_192_BIT,Integer,SignedBit,1 ,1 ,1 ,3 );
494
+ SPECIALIZE_FORMAT (R64G64B64_SFLOAT,SIZE_192_BIT,Float,SignedBit,1 ,1 ,1 ,3 );
495
+ SPECIALIZE_FORMAT (R64G64B64A64_UINT,SIZE_256_BIT,Integer,None ,1 ,1 ,1 ,4 );
496
+ SPECIALIZE_FORMAT (R64G64B64A64_SINT,SIZE_256_BIT,Integer,SignedBit,1 ,1 ,1 ,4 );
497
+ SPECIALIZE_FORMAT (R64G64B64A64_SFLOAT,SIZE_256_BIT,Float,SignedBit,1 ,1 ,1 ,4 );
498
+ SPECIALIZE_FORMAT (B10G11R11_UFLOAT_PACK32,SIZE_32_BIT,Float,BGRABit,1 ,1 ,1 ,3 );
499
+ SPECIALIZE_FORMAT (E5B9G9R9_UFLOAT_PACK32,SIZE_32_BIT,Float,BGRABit,1 ,1 ,1 ,3 );
500
+ // TODO: now do block compression formats!
380
501
#undef SPECIALIZE_FORMAT
381
502
382
503
// TODO: add a `rational<T,Num,Den>` to `mpl` namespace
@@ -402,7 +523,7 @@ struct static_cast_helper<format::view_class_traits<format::BlockViewClass::BVC_
402
523
using T = format::view_class_traits<format::BlockViewClass::BVC_UNKNOWN>;
403
524
using U = format::view_class_traits<ConstexprT>;
404
525
405
- static inline T cast (U val)
526
+ static inline T cast (const U val)
406
527
{
407
528
T retval;
408
529
retval.Class = U::Class;
@@ -419,10 +540,11 @@ struct static_cast_helper<format::block_traits<format::TexelBlockFormat::TBF_UNK
419
540
using T = format::block_traits<format::TexelBlockFormat::TBF_UNKNOWN>;
420
541
using U = format::block_traits<ConstexprT>;
421
542
422
- static inline T cast (U val)
543
+ static inline T cast (const U val)
423
544
{
424
545
T retval;
425
- retval.ClassTraits = _static_cast<format::view_class_traits<>,U::class_traits_t>();
546
+ typename U::class_traits_t dummy;
547
+ retval.ClassTraits = _static_cast<format::view_class_traits<> >(dummy);
426
548
retval.DecodeTypeID = U::DecodeTypeID;
427
549
retval.Kind = U::Kind;
428
550
retval.Attributes = U::Attributes;
@@ -468,7 +590,149 @@ inline view_class_traits<> getTraits(const BlockViewClass _class)
468
590
return retval;
469
591
}
470
592
471
- // TODO: block_traits<> getTraits(const TexelBlockFormatTraits format)
593
+ inline block_traits<> getTraits (const TexelBlockFormat format)
594
+ {
595
+ using dynamic_t = block_traits<>;
596
+ dynamic_t retval;
597
+ switch (format)
598
+ {
599
+ #define CASE (FORMAT) case TexelBlockFormat::FORMAT: \
600
+ { \
601
+ const block_traits<TexelBlockFormat::FORMAT> tmp; \
602
+ retval = _static_cast<dynamic_t>(tmp); \
603
+ break ; \
604
+ }
605
+ // TODO: depth and stencil
606
+ CASE (R4G4_UNORM_PACK8)
607
+ CASE (R4G4B4A4_UNORM_PACK16)
608
+ CASE (B4G4R4A4_UNORM_PACK16)
609
+ CASE (R5G6B5_UNORM_PACK16)
610
+ CASE (B5G6R5_UNORM_PACK16)
611
+ CASE (R5G5B5A1_UNORM_PACK16)
612
+ CASE (B5G5R5A1_UNORM_PACK16)
613
+ CASE (A1R5G5B5_UNORM_PACK16)
614
+ CASE (R8_UNORM)
615
+ CASE (R8_SNORM)
616
+ CASE (R8_USCALED)
617
+ CASE (R8_SSCALED)
618
+ CASE (R8_UINT)
619
+ CASE (R8_SINT)
620
+ CASE (R8_SRGB)
621
+ CASE (R8G8_UNORM)
622
+ CASE (R8G8_SNORM)
623
+ CASE (R8G8_USCALED)
624
+ CASE (R8G8_SSCALED)
625
+ CASE (R8G8_UINT)
626
+ CASE (R8G8_SINT)
627
+ CASE (R8G8_SRGB)
628
+ CASE (R8G8B8_UNORM)
629
+ CASE (R8G8B8_SNORM)
630
+ CASE (R8G8B8_USCALED)
631
+ CASE (R8G8B8_SSCALED)
632
+ CASE (R8G8B8_UINT)
633
+ CASE (R8G8B8_SINT)
634
+ CASE (R8G8B8_SRGB)
635
+ CASE (B8G8R8_UNORM)
636
+ CASE (B8G8R8_SNORM)
637
+ CASE (B8G8R8_USCALED)
638
+ CASE (B8G8R8_SSCALED)
639
+ CASE (B8G8R8_UINT)
640
+ CASE (B8G8R8_SINT)
641
+ CASE (B8G8R8_SRGB)
642
+ CASE (R8G8B8A8_UNORM)
643
+ CASE (R8G8B8A8_SNORM)
644
+ CASE (R8G8B8A8_USCALED)
645
+ CASE (R8G8B8A8_SSCALED)
646
+ CASE (R8G8B8A8_UINT)
647
+ CASE (R8G8B8A8_SINT)
648
+ CASE (R8G8B8A8_SRGB)
649
+ CASE (B8G8R8A8_UNORM)
650
+ CASE (B8G8R8A8_SNORM)
651
+ CASE (B8G8R8A8_USCALED)
652
+ CASE (B8G8R8A8_SSCALED)
653
+ CASE (B8G8R8A8_UINT)
654
+ CASE (B8G8R8A8_SINT)
655
+ CASE (B8G8R8A8_SRGB)
656
+ CASE (A8B8G8R8_UNORM_PACK32)
657
+ CASE (A8B8G8R8_SNORM_PACK32)
658
+ CASE (A8B8G8R8_USCALED_PACK32)
659
+ CASE (A8B8G8R8_SSCALED_PACK32)
660
+ CASE (A8B8G8R8_UINT_PACK32)
661
+ CASE (A8B8G8R8_SINT_PACK32)
662
+ CASE (A8B8G8R8_SRGB_PACK32)
663
+ CASE (A2R10G10B10_UNORM_PACK32)
664
+ CASE (A2R10G10B10_SNORM_PACK32)
665
+ CASE (A2R10G10B10_USCALED_PACK32)
666
+ CASE (A2R10G10B10_SSCALED_PACK32)
667
+ CASE (A2R10G10B10_UINT_PACK32)
668
+ CASE (A2R10G10B10_SINT_PACK32)
669
+ CASE (A2B10G10R10_UNORM_PACK32)
670
+ CASE (A2B10G10R10_SNORM_PACK32)
671
+ CASE (A2B10G10R10_USCALED_PACK32)
672
+ CASE (A2B10G10R10_SSCALED_PACK32)
673
+ CASE (A2B10G10R10_UINT_PACK32)
674
+ CASE (A2B10G10R10_SINT_PACK32)
675
+ CASE (R16_UNORM)
676
+ CASE (R16_SNORM)
677
+ CASE (R16_USCALED)
678
+ CASE (R16_SSCALED)
679
+ CASE (R16_UINT)
680
+ CASE (R16_SINT)
681
+ CASE (R16_SFLOAT)
682
+ CASE (R16G16_UNORM)
683
+ CASE (R16G16_SNORM)
684
+ CASE (R16G16_USCALED)
685
+ CASE (R16G16_SSCALED)
686
+ CASE (R16G16_UINT)
687
+ CASE (R16G16_SINT)
688
+ CASE (R16G16_SFLOAT)
689
+ CASE (R16G16B16_UNORM)
690
+ CASE (R16G16B16_SNORM)
691
+ CASE (R16G16B16_USCALED)
692
+ CASE (R16G16B16_SSCALED)
693
+ CASE (R16G16B16_UINT)
694
+ CASE (R16G16B16_SINT)
695
+ CASE (R16G16B16_SFLOAT)
696
+ CASE (R16G16B16A16_UNORM)
697
+ CASE (R16G16B16A16_SNORM)
698
+ CASE (R16G16B16A16_USCALED)
699
+ CASE (R16G16B16A16_SSCALED)
700
+ CASE (R16G16B16A16_UINT)
701
+ CASE (R16G16B16A16_SINT)
702
+ CASE (R16G16B16A16_SFLOAT)
703
+ CASE (R32_UINT)
704
+ CASE (R32_SINT)
705
+ CASE (R32_SFLOAT)
706
+ CASE (R32G32_UINT)
707
+ CASE (R32G32_SINT)
708
+ CASE (R32G32_SFLOAT)
709
+ CASE (R32G32B32_UINT)
710
+ CASE (R32G32B32_SINT)
711
+ CASE (R32G32B32_SFLOAT)
712
+ CASE (R32G32B32A32_UINT)
713
+ CASE (R32G32B32A32_SINT)
714
+ CASE (R32G32B32A32_SFLOAT)
715
+ CASE (R64_UINT)
716
+ CASE (R64_SINT)
717
+ CASE (R64_SFLOAT)
718
+ CASE (R64G64_UINT)
719
+ CASE (R64G64_SINT)
720
+ CASE (R64G64_SFLOAT)
721
+ CASE (R64G64B64_UINT)
722
+ CASE (R64G64B64_SINT)
723
+ CASE (R64G64B64_SFLOAT)
724
+ CASE (R64G64B64A64_UINT)
725
+ CASE (R64G64B64A64_SINT)
726
+ CASE (R64G64B64A64_SFLOAT)
727
+ CASE (B10G11R11_UFLOAT_PACK32)
728
+ CASE (E5B9G9R9_UFLOAT_PACK32)
729
+ // TODO: block compressed
730
+ #undef CASE
731
+ default :
732
+ break ;
733
+ }
734
+ return retval;
735
+ }
472
736
473
737
// TODO: move `core::rational<T>` to HLSL
474
738
/*
0 commit comments