MCPcopy Create free account
hub / github.com/defold/defold / optimize_selector_codebook

Method optimize_selector_codebook

engine/dlib/src/basis/encoder/basisu_frontend.cpp:674–748  ·  view source on GitHub ↗

This method will change the number and ordering of the selector codebook clusters.

Source from the content-addressed store, hash-verified

672
673 // This method will change the number and ordering of the selector codebook clusters.
674 void basisu_frontend::optimize_selector_codebook()
675 {
676 debug_printf("optimize_selector_codebook\n");
677
678 const uint32_t orig_total_selector_clusters = (uint32_t)m_optimized_cluster_selectors.size();
679
680 bool_vec selector_cluster_was_used(m_optimized_cluster_selectors.size());
681 for (uint32_t i = 0; i < m_total_blocks; i++)
682 selector_cluster_was_used[m_block_selector_cluster_index[i]] = true;
683
684 int_vec old_to_new(m_optimized_cluster_selectors.size());
685 int_vec new_to_old;
686 uint32_t total_new_entries = 0;
687
688 std::unordered_map<uint32_t, uint32_t> selector_hashmap;
689
690 for (int i = 0; i < static_cast<int>(m_optimized_cluster_selectors.size()); i++)
691 {
692 if (!selector_cluster_was_used[i])
693 {
694 old_to_new[i] = -1;
695 continue;
696 }
697
698 const uint32_t raw_selector_bits = m_optimized_cluster_selectors[i].get_raw_selector_bits();
699
700 auto find_res = selector_hashmap.insert(std::make_pair(raw_selector_bits, total_new_entries));
701 if (!find_res.second)
702 {
703 old_to_new[i] = (find_res.first)->second;
704 continue;
705 }
706
707 old_to_new[i] = total_new_entries++;
708 new_to_old.push_back(i);
709 }
710
711 debug_printf("Original selector clusters: %u, new cluster selectors: %u\n", orig_total_selector_clusters, total_new_entries);
712
713 for (uint32_t i = 0; i < m_block_selector_cluster_index.size(); i++)
714 {
715 BASISU_FRONTEND_VERIFY((old_to_new[m_block_selector_cluster_index[i]] >= 0) && (old_to_new[m_block_selector_cluster_index[i]] < (int)total_new_entries));
716 m_block_selector_cluster_index[i] = old_to_new[m_block_selector_cluster_index[i]];
717 }
718
719 basisu::vector<etc_block> new_optimized_cluster_selectors(m_optimized_cluster_selectors.size() ? total_new_entries : 0);
720 basisu::vector<uint_vec> new_selector_cluster_indices(m_selector_cluster_block_indices.size() ? total_new_entries : 0);
721
722 for (uint32_t i = 0; i < total_new_entries; i++)
723 {
724 if (m_optimized_cluster_selectors.size())
725 new_optimized_cluster_selectors[i] = m_optimized_cluster_selectors[new_to_old[i]];
726
727 //if (m_selector_cluster_block_indices.size())
728 // new_selector_cluster_indices[i] = m_selector_cluster_block_indices[new_to_old[i]];
729 }
730
731 for (uint32_t i = 0; i < m_block_selector_cluster_index.size(); i++)

Callers

nothing calls this directly

Calls 6

debug_printfFunction · 0.85
sizeMethod · 0.45
get_raw_selector_bitsMethod · 0.45
insertMethod · 0.45
push_backMethod · 0.45
swapMethod · 0.45

Tested by

no test coverage detected