Skip to content

Commit 426e5a1

Browse files
committed
turned on inner devsh and realised I could've done it much simpler
1 parent 17ff30f commit 426e5a1

File tree

1 file changed

+19
-48
lines changed

1 file changed

+19
-48
lines changed

src/nbl/video/utilities/IUtilities.cpp

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,9 @@ size_t ImageRegionIterator::getMemoryNeededForRemainingRegions() const
316316
return memoryNeededForRemainingRegions;
317317
}
318318

319-
// These Swizzles makes sure copying from srcFormat image to promotedFormat image is consistent and extra "unused" channels will be ZERO and alpha will be ONE
320-
struct FourComponentSwizzle
319+
// This Swizzles makes sure copying from srcFormat image to promotedFormat image is consistent and extra "unused" channels will be ZERO and alpha will be ONE
320+
template<unsigned int SRC_CHANNELS>
321+
struct PromotionComponentSwizzle
321322
{
322323
template<typename InT, typename OutT>
323324
void operator()(const InT* in, OutT* out) const
@@ -326,51 +327,21 @@ struct FourComponentSwizzle
326327
using out_t = std::conditional_t<std::is_void_v<OutT>, uint64_t, OutT>;
327328

328329
reinterpret_cast<out_t*>(out)[0u] = reinterpret_cast<const in_t*>(in)[0u];
329-
reinterpret_cast<out_t*>(out)[1u] = reinterpret_cast<const in_t*>(in)[1u];
330-
reinterpret_cast<out_t*>(out)[2u] = reinterpret_cast<const in_t*>(in)[2u];
331-
reinterpret_cast<out_t*>(out)[3u] = reinterpret_cast<const in_t*>(in)[3u];
332-
}
333-
};
334-
struct ThreeComponentSwizzle
335-
{
336-
template<typename InT, typename OutT>
337-
void operator()(const InT* in, OutT* out) const
338-
{
339-
using in_t = std::conditional_t<std::is_void_v<InT>, uint64_t, InT>;
340-
using out_t = std::conditional_t<std::is_void_v<OutT>, uint64_t, OutT>;
341330

342-
reinterpret_cast<out_t*>(out)[0u] = reinterpret_cast<const in_t*>(in)[0u];
343-
reinterpret_cast<out_t*>(out)[1u] = reinterpret_cast<const in_t*>(in)[1u];
344-
reinterpret_cast<out_t*>(out)[2u] = reinterpret_cast<const in_t*>(in)[2u];
345-
reinterpret_cast<out_t*>(out)[3u] = static_cast<in_t>(1);
346-
}
347-
};
348-
struct TwoComponentSwizzle
349-
{
350-
template<typename InT, typename OutT>
351-
void operator()(const InT* in, OutT* out) const
352-
{
353-
using in_t = std::conditional_t<std::is_void_v<InT>, uint64_t, InT>;
354-
using out_t = std::conditional_t<std::is_void_v<OutT>, uint64_t, OutT>;
331+
if constexpr (SRC_CHANNELS > 1)
332+
reinterpret_cast<out_t*>(out)[1u] = reinterpret_cast<const in_t*>(in)[1u];
333+
else
334+
reinterpret_cast<out_t*>(out)[1u] = static_cast<in_t>(0);
355335

356-
reinterpret_cast<out_t*>(out)[0u] = reinterpret_cast<const in_t*>(in)[0u];
357-
reinterpret_cast<out_t*>(out)[1u] = reinterpret_cast<const in_t*>(in)[1u];
358-
reinterpret_cast<out_t*>(out)[2u] = static_cast<in_t>(0);
359-
reinterpret_cast<out_t*>(out)[3u] = static_cast<in_t>(1);
360-
}
361-
};
362-
struct OneComponentSwizzle
363-
{
364-
template<typename InT, typename OutT>
365-
void operator()(const InT* in, OutT* out) const
366-
{
367-
using in_t = std::conditional_t<std::is_void_v<InT>, uint64_t, InT>;
368-
using out_t = std::conditional_t<std::is_void_v<OutT>, uint64_t, OutT>;
336+
if constexpr (SRC_CHANNELS > 2)
337+
reinterpret_cast<out_t*>(out)[2u] = reinterpret_cast<const in_t*>(in)[2u];
338+
else
339+
reinterpret_cast<out_t*>(out)[2u] = static_cast<in_t>(0);
369340

370-
reinterpret_cast<out_t*>(out)[0u] = reinterpret_cast<const in_t*>(in)[0u];
371-
reinterpret_cast<out_t*>(out)[1u] = static_cast<in_t>(0);
372-
reinterpret_cast<out_t*>(out)[2u] = static_cast<in_t>(0);
373-
reinterpret_cast<out_t*>(out)[3u] = static_cast<in_t>(1);
341+
if constexpr (SRC_CHANNELS > 3)
342+
reinterpret_cast<out_t*>(out)[3u] = reinterpret_cast<const in_t*>(in)[3u];
343+
else
344+
reinterpret_cast<out_t*>(out)[3u] = static_cast<in_t>(1);
374345
}
375346
};
376347

@@ -413,13 +384,13 @@ bool performCopy(
413384
{
414385
auto srcChannelCount = asset::getFormatChannelCount(srcImageFormat);
415386
if (srcChannelCount == 1u)
416-
performCopyUsingImageFilter<asset::CSwizzleAndConvertImageFilter<asset::EF_UNKNOWN, asset::EF_UNKNOWN, OneComponentSwizzle>>(inCPUImage, outCPUImage, region);
387+
performCopyUsingImageFilter<asset::CSwizzleAndConvertImageFilter<asset::EF_UNKNOWN, asset::EF_UNKNOWN, PromotionComponentSwizzle<1u>>>(inCPUImage, outCPUImage, region);
417388
else if (srcChannelCount == 2u)
418-
performCopyUsingImageFilter<asset::CSwizzleAndConvertImageFilter<asset::EF_UNKNOWN, asset::EF_UNKNOWN, TwoComponentSwizzle>>(inCPUImage, outCPUImage, region);
389+
performCopyUsingImageFilter<asset::CSwizzleAndConvertImageFilter<asset::EF_UNKNOWN, asset::EF_UNKNOWN, PromotionComponentSwizzle<2u>>>(inCPUImage, outCPUImage, region);
419390
else if (srcChannelCount == 3u)
420-
performCopyUsingImageFilter<asset::CSwizzleAndConvertImageFilter<asset::EF_UNKNOWN, asset::EF_UNKNOWN, ThreeComponentSwizzle>>(inCPUImage, outCPUImage, region);
391+
performCopyUsingImageFilter<asset::CSwizzleAndConvertImageFilter<asset::EF_UNKNOWN, asset::EF_UNKNOWN, PromotionComponentSwizzle<3u>>>(inCPUImage, outCPUImage, region);
421392
else
422-
performCopyUsingImageFilter<asset::CSwizzleAndConvertImageFilter<asset::EF_UNKNOWN, asset::EF_UNKNOWN, FourComponentSwizzle>>(inCPUImage, outCPUImage, region);
393+
performCopyUsingImageFilter<asset::CSwizzleAndConvertImageFilter<asset::EF_UNKNOWN, asset::EF_UNKNOWN, PromotionComponentSwizzle<4u>>>(inCPUImage, outCPUImage, region);
423394
}
424395
}
425396

0 commit comments

Comments
 (0)