| 1708 | static uint8_t g_ktx2_uastc_alpha_dfd[44] = { 0x2C,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x28,0x0,0xA6,0x1,0x2,0x0,0x3,0x3,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7F,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF }; |
| 1709 | |
| 1710 | void basis_compressor::get_dfd(uint8_vec &dfd, const basist::ktx2_header &header) |
| 1711 | { |
| 1712 | const uint8_t* pDFD; |
| 1713 | uint32_t dfd_len; |
| 1714 | |
| 1715 | if (m_params.m_uastc) |
| 1716 | { |
| 1717 | if (m_any_source_image_has_alpha) |
| 1718 | { |
| 1719 | pDFD = g_ktx2_uastc_alpha_dfd; |
| 1720 | dfd_len = sizeof(g_ktx2_uastc_alpha_dfd); |
| 1721 | } |
| 1722 | else |
| 1723 | { |
| 1724 | pDFD = g_ktx2_uastc_nonalpha_dfd; |
| 1725 | dfd_len = sizeof(g_ktx2_uastc_nonalpha_dfd); |
| 1726 | } |
| 1727 | } |
| 1728 | else |
| 1729 | { |
| 1730 | if (m_any_source_image_has_alpha) |
| 1731 | { |
| 1732 | pDFD = g_ktx2_etc1s_alpha_dfd; |
| 1733 | dfd_len = sizeof(g_ktx2_etc1s_alpha_dfd); |
| 1734 | } |
| 1735 | else |
| 1736 | { |
| 1737 | pDFD = g_ktx2_etc1s_nonalpha_dfd; |
| 1738 | dfd_len = sizeof(g_ktx2_etc1s_nonalpha_dfd); |
| 1739 | } |
| 1740 | } |
| 1741 | |
| 1742 | assert(dfd_len >= 44); |
| 1743 | |
| 1744 | dfd.resize(dfd_len); |
| 1745 | memcpy(dfd.data(), pDFD, dfd_len); |
| 1746 | |
| 1747 | uint32_t dfd_bits = basisu::read_le_dword(dfd.data() + 3 * sizeof(uint32_t)); |
| 1748 | |
| 1749 | dfd_bits &= ~(0xFF << 16); |
| 1750 | |
| 1751 | if (m_params.m_ktx2_srgb_transfer_func) |
| 1752 | dfd_bits |= (basist::KTX2_KHR_DF_TRANSFER_SRGB << 16); |
| 1753 | else |
| 1754 | dfd_bits |= (basist::KTX2_KHR_DF_TRANSFER_LINEAR << 16); |
| 1755 | |
| 1756 | basisu::write_le_dword(dfd.data() + 3 * sizeof(uint32_t), dfd_bits); |
| 1757 | |
| 1758 | if (header.m_supercompression_scheme != basist::KTX2_SS_NONE) |
| 1759 | { |
| 1760 | uint32_t plane_bits = basisu::read_le_dword(dfd.data() + 5 * sizeof(uint32_t)); |
| 1761 | |
| 1762 | plane_bits &= ~0xFF; |
| 1763 | |
| 1764 | basisu::write_le_dword(dfd.data() + 5 * sizeof(uint32_t), plane_bits); |
| 1765 | } |
| 1766 | |
| 1767 | // Fix up the DFD channel(s) |
no test coverage detected