MCPcopy Create free account
hub / github.com/GPUOpen-Tools/compressonator / GetClusterMean

Function GetClusterMean

cmp_core/shaders/bc7_encode_kernel.cpp:618–659  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

616}
617
618INLINE void GetClusterMean(CGV_FLOAT cluster_mean_out[SOURCE_BLOCK_SIZE][MAX_CHANNELS],
619 CGV_FLOAT image_src[SOURCE_BLOCK_SIZE * MAX_CHANNELS],
620 CGV_UINT8 index_in[MAX_SUBSET_SIZE],
621 CGV_INT numEntries, // < 16
622 CGU_UINT8 channels3or4)
623{ // IN: 3 = RGB or 4 = RGBA (4 = MAX_CHANNELS)
624 // unused index values are underfined
625 CGV_UINT8 i_cnt[MAX_SUBSET_SIZE];
626 CGV_UINT8 i_comp[MAX_SUBSET_SIZE];
627
628 for (CGV_INT i = 0; i < numEntries; i++)
629 for (CGU_UINT8 ch = 0; ch < channels3or4; ch++)
630 {
631 CGV_UINT8 idx = index_in[i] & 0x0F;
632 cluster_mean_out[idx][ch] = 0;
633 i_cnt[idx] = 0;
634 }
635
636 CGV_UINT8 ic = 0; // was CGV_INT
637 for (CGV_INT i = 0; i < numEntries; i++)
638 {
639 CGV_UINT8 idx = index_in[i] & 0x0F;
640 if (i_cnt[idx] == 0)
641 i_comp[ic++] = idx;
642 i_cnt[idx]++;
643
644 for (CGU_UINT8 ch = 0; ch < channels3or4; ch++)
645 {
646 cluster_mean_out[idx][ch] += image_src[i + (ch * SOURCE_BLOCK_SIZE)];
647 }
648 }
649
650 for (CGU_UINT8 ch = 0; ch < channels3or4; ch++)
651 for (CGU_INT i = 0; i < ic; i++)
652 {
653 if (i_cnt[i_comp[i]] != 0)
654 {
655 CGV_UINT8 icmp = i_comp[i];
656 cluster_mean_out[icmp][ch] = (CGV_FLOAT)cmp_floor((cluster_mean_out[icmp][ch] / (CGV_FLOAT)i_cnt[icmp]) + 0.5F);
657 }
658 }
659}
660
661INLINE void GetImageMean(CGV_FLOAT image_mean_out[SOURCE_BLOCK_SIZE * MAX_CHANNELS],
662 CGV_FLOAT image_src[SOURCE_BLOCK_SIZE * MAX_CHANNELS],

Callers 1

get_ideal_clusterFunction · 0.85

Calls 1

cmp_floorFunction · 0.85

Tested by

no test coverage detected