mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	astc: Minor changes to InputBitStream
This commit is contained in:
		
							parent
							
								
									d71d7d917e
								
							
						
					
					
						commit
						9b8fb3c756
					
				@ -39,18 +39,15 @@ constexpr u32 Popcnt(u32 n) {
 | 
			
		||||
 | 
			
		||||
class InputBitStream {
 | 
			
		||||
public:
 | 
			
		||||
    explicit InputBitStream(const u8* ptr, s32 start_offset = 0)
 | 
			
		||||
    explicit InputBitStream(const u8* ptr, std::size_t start_offset = 0)
 | 
			
		||||
        : m_CurByte(ptr), m_NextBit(start_offset % 8) {}
 | 
			
		||||
 | 
			
		||||
    ~InputBitStream() = default;
 | 
			
		||||
 | 
			
		||||
    s32 GetBitsRead() const {
 | 
			
		||||
    std::size_t GetBitsRead() const {
 | 
			
		||||
        return m_BitsRead;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    s32 ReadBit() {
 | 
			
		||||
 | 
			
		||||
        s32 bit = *m_CurByte >> m_NextBit++;
 | 
			
		||||
    u32 ReadBit() {
 | 
			
		||||
        u32 bit = *m_CurByte >> m_NextBit++;
 | 
			
		||||
        while (m_NextBit >= 8) {
 | 
			
		||||
            m_NextBit -= 8;
 | 
			
		||||
            m_CurByte++;
 | 
			
		||||
@ -60,9 +57,18 @@ public:
 | 
			
		||||
        return bit & 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    u32 ReadBits(u32 nBits) {
 | 
			
		||||
    u32 ReadBits(std::size_t nBits) {
 | 
			
		||||
        u32 ret = 0;
 | 
			
		||||
        for (u32 i = 0; i < nBits; i++) {
 | 
			
		||||
        for (std::size_t i = 0; i < nBits; ++i) {
 | 
			
		||||
            ret |= (ReadBit() & 1) << i;
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    template <std::size_t nBits>
 | 
			
		||||
    u32 ReadBits() {
 | 
			
		||||
        u32 ret = 0;
 | 
			
		||||
        for (std::size_t i = 0; i < nBits; ++i) {
 | 
			
		||||
            ret |= (ReadBit() & 1) << i;
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
@ -70,8 +76,8 @@ public:
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    const u8* m_CurByte;
 | 
			
		||||
    s32 m_NextBit = 0;
 | 
			
		||||
    s32 m_BitsRead = 0;
 | 
			
		||||
    std::size_t m_NextBit = 0;
 | 
			
		||||
    std::size_t m_BitsRead = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class OutputBitStream {
 | 
			
		||||
@ -200,13 +206,13 @@ static void DecodeTritBlock(InputBitStream& bits, std::vector<IntegerEncodedValu
 | 
			
		||||
    // Read the trit encoded block according to
 | 
			
		||||
    // table C.2.14
 | 
			
		||||
    m[0] = bits.ReadBits(nBitsPerValue);
 | 
			
		||||
    T = bits.ReadBits(2);
 | 
			
		||||
    T = bits.ReadBits<2>();
 | 
			
		||||
    m[1] = bits.ReadBits(nBitsPerValue);
 | 
			
		||||
    T |= bits.ReadBits(2) << 2;
 | 
			
		||||
    T |= bits.ReadBits<2>() << 2;
 | 
			
		||||
    m[2] = bits.ReadBits(nBitsPerValue);
 | 
			
		||||
    T |= bits.ReadBit() << 4;
 | 
			
		||||
    m[3] = bits.ReadBits(nBitsPerValue);
 | 
			
		||||
    T |= bits.ReadBits(2) << 5;
 | 
			
		||||
    T |= bits.ReadBits<2>() << 5;
 | 
			
		||||
    m[4] = bits.ReadBits(nBitsPerValue);
 | 
			
		||||
    T |= bits.ReadBit() << 7;
 | 
			
		||||
 | 
			
		||||
@ -259,11 +265,11 @@ static void DecodeQus32Block(InputBitStream& bits, std::vector<IntegerEncodedVal
 | 
			
		||||
    // Read the trit encoded block according to
 | 
			
		||||
    // table C.2.15
 | 
			
		||||
    m[0] = bits.ReadBits(nBitsPerValue);
 | 
			
		||||
    Q = bits.ReadBits(3);
 | 
			
		||||
    Q = bits.ReadBits<3>();
 | 
			
		||||
    m[1] = bits.ReadBits(nBitsPerValue);
 | 
			
		||||
    Q |= bits.ReadBits(2) << 3;
 | 
			
		||||
    Q |= bits.ReadBits<2>() << 3;
 | 
			
		||||
    m[2] = bits.ReadBits(nBitsPerValue);
 | 
			
		||||
    Q |= bits.ReadBits(2) << 5;
 | 
			
		||||
    Q |= bits.ReadBits<2>() << 5;
 | 
			
		||||
 | 
			
		||||
    Bits<u32> Qb(Q);
 | 
			
		||||
    if (Qb(1, 2) == 3 && Qb(5, 6) == 0) {
 | 
			
		||||
@ -399,7 +405,7 @@ static TexelWeightParams DecodeBlockInfo(InputBitStream& strm) {
 | 
			
		||||
    TexelWeightParams params;
 | 
			
		||||
 | 
			
		||||
    // Read the entire block mode all at once
 | 
			
		||||
    u16 modeBits = static_cast<u16>(strm.ReadBits(11));
 | 
			
		||||
    u16 modeBits = static_cast<u16>(strm.ReadBits<11>());
 | 
			
		||||
 | 
			
		||||
    // Does this match the void extent block mode?
 | 
			
		||||
    if ((modeBits & 0x01FF) == 0x1FC) {
 | 
			
		||||
@ -598,14 +604,14 @@ static void FillVoidExtentLDR(InputBitStream& strm, u32* const outBuf, u32 block
 | 
			
		||||
                              u32 blockHeight) {
 | 
			
		||||
    // Don't actually care about the void extent, just read the bits...
 | 
			
		||||
    for (s32 i = 0; i < 4; ++i) {
 | 
			
		||||
        strm.ReadBits(13);
 | 
			
		||||
        strm.ReadBits<13>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Decode the RGBA components and renormalize them to the range [0, 255]
 | 
			
		||||
    u16 r = static_cast<u16>(strm.ReadBits(16));
 | 
			
		||||
    u16 g = static_cast<u16>(strm.ReadBits(16));
 | 
			
		||||
    u16 b = static_cast<u16>(strm.ReadBits(16));
 | 
			
		||||
    u16 a = static_cast<u16>(strm.ReadBits(16));
 | 
			
		||||
    u16 r = static_cast<u16>(strm.ReadBits<16>());
 | 
			
		||||
    u16 g = static_cast<u16>(strm.ReadBits<16>());
 | 
			
		||||
    u16 b = static_cast<u16>(strm.ReadBits<16>());
 | 
			
		||||
    u16 a = static_cast<u16>(strm.ReadBits<16>());
 | 
			
		||||
 | 
			
		||||
    u32 rgba = (r >> 8) | (g & 0xFF00) | (static_cast<u32>(b) & 0xFF00) << 8 |
 | 
			
		||||
               (static_cast<u32>(a) & 0xFF00) << 16;
 | 
			
		||||
@ -1390,7 +1396,7 @@ static void DecompressBlock(const u8 inBuf[16], const u32 blockWidth, const u32
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Read num partitions
 | 
			
		||||
    u32 nPartitions = strm.ReadBits(2) + 1;
 | 
			
		||||
    u32 nPartitions = strm.ReadBits<2>() + 1;
 | 
			
		||||
    assert(nPartitions <= 4);
 | 
			
		||||
 | 
			
		||||
    if (nPartitions == 4 && weightParams.m_bDualPlane) {
 | 
			
		||||
@ -1415,17 +1421,17 @@ static void DecompressBlock(const u8 inBuf[16], const u32 blockWidth, const u32
 | 
			
		||||
    // Read extra config data...
 | 
			
		||||
    u32 baseCEM = 0;
 | 
			
		||||
    if (nPartitions == 1) {
 | 
			
		||||
        colorEndpos32Mode[0] = strm.ReadBits(4);
 | 
			
		||||
        colorEndpos32Mode[0] = strm.ReadBits<4>();
 | 
			
		||||
        partitionIndex = 0;
 | 
			
		||||
    } else {
 | 
			
		||||
        partitionIndex = strm.ReadBits(10);
 | 
			
		||||
        baseCEM = strm.ReadBits(6);
 | 
			
		||||
        partitionIndex = strm.ReadBits<10>();
 | 
			
		||||
        baseCEM = strm.ReadBits<6>();
 | 
			
		||||
    }
 | 
			
		||||
    u32 baseMode = (baseCEM & 3);
 | 
			
		||||
 | 
			
		||||
    // Remaining bits are color endpos32 data...
 | 
			
		||||
    u32 nWeightBits = weightParams.GetPackedBitSize();
 | 
			
		||||
    s32 remainingBits = 128 - nWeightBits - strm.GetBitsRead();
 | 
			
		||||
    s32 remainingBits = 128 - nWeightBits - static_cast<s32>(strm.GetBitsRead());
 | 
			
		||||
 | 
			
		||||
    // Consider extra bits prior to texel data...
 | 
			
		||||
    u32 extraCEMbits = 0;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user