Skip to content

Commit b459895

Browse files
author
devsh
committed
actually specialize the non-BC color formats
1 parent 277b705 commit b459895

File tree

2 files changed

+295
-15
lines changed

2 files changed

+295
-15
lines changed

include/nbl/builtin/hlsl/format.hlsl

Lines changed: 276 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "nbl/builtin/hlsl/format/shared_exp.hlsl"
55
#include "nbl/builtin/hlsl/format/octahedral.hlsl"
66
#include "nbl/builtin/hlsl/type_traits.hlsl"
7+
#include "nbl/builtin/hlsl/cpp_compat/basic.h"
78

89
namespace nbl
910
{
@@ -292,7 +293,9 @@ struct view_class_traits<BlockViewClass::CLASS> \
292293
}
293294
SPECIALIZE_CLASS(SIZE_8_BIT,R8_UINT,1,1);
294295
SPECIALIZE_CLASS(SIZE_16_BIT,R16_UINT,2,2);
296+
SPECIALIZE_CLASS(SIZE_24_BIT,R8G8B8_UINT,3,1);
295297
SPECIALIZE_CLASS(SIZE_32_BIT,R32_UINT,4,4);
298+
SPECIALIZE_CLASS(SIZE_48_BIT,R16G16B16_UINT,6,2);
296299
SPECIALIZE_CLASS(SIZE_64_BIT,R32G32_UINT,8,4);
297300
SPECIALIZE_CLASS(SIZE_96_BIT,R32G32B32_UINT,12,4);
298301
SPECIALIZE_CLASS(SIZE_128_BIT,R32G32B32A32_UINT,16,4);
@@ -347,10 +350,9 @@ struct block_traits
347350
struct block_traits<TexelBlockFormat::FORMAT> \
348351
{ \
349352
using class_traits_t = view_class_traits<BlockViewClass::CLASS>; \
350-
NBL_CONSTEXPR_STATIC_INLINE class_traits_t ClassTraits; \
351353
NBL_CONSTEXPR_STATIC_INLINE const std::type_info* DecodeTypeID = &typeid(float); \
352354
NBL_CONSTEXPR_STATIC_INLINE TexelKind Kind = KIND; \
353-
NBL_CONSTEXPR_STATIC_INLINE TexelAttributes Attributes = ATTRS; \
355+
NBL_CONSTEXPR_STATIC_INLINE TexelAttributes Attributes = TexelAttributes(ATTRS); \
354356
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeX = W; \
355357
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeY = H; \
356358
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeZ = D; \
@@ -361,22 +363,141 @@ struct block_traits<TexelBlockFormat::FORMAT> \
361363
struct block_traits<TexelBlockFormat::FORMAT> \
362364
{ \
363365
using class_traits_t = view_class_traits<BlockViewClass::CLASS>; \
364-
NBL_CONSTEXPR_STATIC_INLINE class_traits_t ClassTraits; \
365366
NBL_CONSTEXPR_STATIC_INLINE uint32_t DecodeTypeID = impl::typeid_t<float>::value; \
366367
NBL_CONSTEXPR_STATIC_INLINE TexelKind Kind = KIND; \
367-
NBL_CONSTEXPR_STATIC_INLINE TexelAttributes Attributes = ATTRS; \
368+
NBL_CONSTEXPR_STATIC_INLINE TexelAttributes Attributes = TexelAttributes(ATTRS); \
368369
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeX = W; \
369370
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeY = H; \
370371
NBL_CONSTEXPR_STATIC_INLINE uint32_t BlockSizeZ = D; \
371372
NBL_CONSTEXPR_STATIC_INLINE uint32_t Channels = C; \
372373
}
373374
#endif
374375
//SPECIALIZE_FORMAT(D16_UNORM,BVC_UNKNOWN,Normalized,HasDepthBit,1,1,1,1);
375-
// TODO: now do the rest
376+
// TODO: depth and stencil formats
376377
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!
380501
#undef SPECIALIZE_FORMAT
381502

382503
// 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_
402523
using T = format::view_class_traits<format::BlockViewClass::BVC_UNKNOWN>;
403524
using U = format::view_class_traits<ConstexprT>;
404525

405-
static inline T cast(U val)
526+
static inline T cast(const U val)
406527
{
407528
T retval;
408529
retval.Class = U::Class;
@@ -419,10 +540,11 @@ struct static_cast_helper<format::block_traits<format::TexelBlockFormat::TBF_UNK
419540
using T = format::block_traits<format::TexelBlockFormat::TBF_UNKNOWN>;
420541
using U = format::block_traits<ConstexprT>;
421542

422-
static inline T cast(U val)
543+
static inline T cast(const U val)
423544
{
424545
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);
426548
retval.DecodeTypeID = U::DecodeTypeID;
427549
retval.Kind = U::Kind;
428550
retval.Attributes = U::Attributes;
@@ -468,7 +590,149 @@ inline view_class_traits<> getTraits(const BlockViewClass _class)
468590
return retval;
469591
}
470592

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+
}
472736

473737
// TODO: move `core::rational<T>` to HLSL
474738
/*

include/nbl/video/utilities/CComputeBlit.h

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,33 @@ class NBL_API2 CComputeBlit : public core::IReferenceCounted
5555
}
5656
else
5757
{
58-
const auto compatibleSizes = asset::getFormatClass(format);
59-
const auto classNewEnum = static_cast<hlsl::format::BlockViewClass>(compatibleSizes);
60-
const auto compatFormatNewEnum = hlsl::format::getTraits(classNewEnum).RawAccessViewFormat;
58+
const auto formatNewEnum = static_cast<hlsl::format::TexelBlockFormat>(format);
59+
const auto compatFormatNewEnum = hlsl::format::getTraits(formatNewEnum).ClassTraits.RawAccessViewFormat;
6160
const auto compatFormat = static_cast<asset::E_FORMAT>(compatFormatNewEnum);
61+
assert(compatFormat!=asset::EF_UNKNOWN); // if you hit this, then time to implement missing traits and switch-cases
6262
const auto& compatClassFormatUsages = usages[compatFormat];
6363
if (!compatClassFormatUsages.storageImage)
6464
return asset::EF_UNKNOWN;
6565
else
6666
return compatFormat;
6767
}
6868
}
69+
/*
70+
struct STask
71+
{
72+
hlsl::vector<uint8_t,3> preloadWindow;
73+
asset::E_FORMAT inFormat;
74+
asset::E_FORMAT outFormat;
75+
// default no coverage adjustment
76+
uint8_t alphaBinCountLog2 : 4 = 0;
77+
};
78+
inline void initializeTaskDefault(STask& task) const
79+
{
80+
auto physDev = m_device->getPhysicalDevice();
81+
const auto formatTrait = hlsl::format::getTraits(static_cast<hlsl::format::TexelBlockFormat>(task.outFormat));
82+
task.alphaBinCountLog2 = hlsl::max(,task.alphaBinCountLog2);
83+
}
84+
*/
6985
#if 0
7086
// @param `alphaBinCount` is only required to size the histogram present in the default nbl_glsl_blit_AlphaStatistics_t in default_compute_common.comp
7187
core::smart_refctd_ptr<video::IGPUShader> createAlphaTestSpecializedShader(const asset::IImage::E_TYPE inImageType, const uint32_t alphaBinCount = asset::IBlitUtilities::DefaultAlphaBinCount);

0 commit comments

Comments
 (0)