Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: src/utils/SkTextureCompressor_ASTC.cpp

Issue 444093002: - Add astcbitmap to gm slides (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Decode trits/quints into temp buffers Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkTextureCompressor_ASTC.h" 8 #include "SkTextureCompressor_ASTC.h"
9 #include "SkTextureCompressor_Blitter.h" 9 #include "SkTextureCompressor_Blitter.h"
10 10
(...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 while (nVals > 0) { 786 while (nVals > 0) {
787 787
788 if (nTrits > 0) { 788 if (nTrits > 0) {
789 SkASSERT(0 == nQuints); 789 SkASSERT(0 == nQuints);
790 790
791 int endBlockBit = startBit + 8 + 5*nBits; 791 int endBlockBit = startBit + 8 + 5*nBits;
792 if (endBlockBit > endBit) { 792 if (endBlockBit > endBit) {
793 endBlockBit = endBit; 793 endBlockBit = endBit;
794 } 794 }
795 795
796 decode_trit_block(dst, nBits, read_astc_bits(src, startBit, endBlock Bit)); 796 // Trit blocks are three values large.
797 int trits[5];
798 decode_trit_block(trits, nBits, read_astc_bits(src, startBit, endBlo ckBit));
799 memcpy(dst, trits, SkMin32(nVals, 5)*sizeof(int));
800
797 dst += 5; 801 dst += 5;
798 nVals -= 5; 802 nVals -= 5;
799 startBit = endBlockBit; 803 startBit = endBlockBit;
800 804
801 } else if (nQuints > 0) { 805 } else if (nQuints > 0) {
802 SkASSERT(0 == nTrits); 806 SkASSERT(0 == nTrits);
803 807
804 int endBlockBit = startBit + 7 + 3*nBits; 808 int endBlockBit = startBit + 7 + 3*nBits;
805 if (endBlockBit > endBit) { 809 if (endBlockBit > endBit) {
806 endBlockBit = endBit; 810 endBlockBit = endBit;
807 } 811 }
808 812
809 decode_quint_block(dst, nBits, read_astc_bits(src, startBit, endBloc kBit)); 813 // Quint blocks are three values large
814 int quints[3];
815 decode_quint_block(quints, nBits, read_astc_bits(src, startBit, endB lockBit));
816 memcpy(dst, quints, SkMin32(nVals, 3)*sizeof(int));
817
810 dst += 3; 818 dst += 3;
811 nVals -= 3; 819 nVals -= 3;
812 startBit = endBlockBit; 820 startBit = endBlockBit;
813 821
814 } else { 822 } else {
815 // Just read the bits, but don't read more than we have... 823 // Just read the bits, but don't read more than we have...
816 int endValBit = startBit + nBits; 824 int endValBit = startBit + nBits;
817 if (endValBit > endBit) { 825 if (endValBit > endBit) {
818 endValBit = endBit; 826 endValBit = endBit;
819 } 827 }
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
1701 break; 1709 break;
1702 1710
1703 default: 1711 default:
1704 SkDEBUGFAIL("Internal ASTC decoding error."); 1712 SkDEBUGFAIL("Internal ASTC decoding error.");
1705 break; 1713 break;
1706 } 1714 }
1707 1715
1708 // The rest of the CEM config will be between the dual plane bit selecto r 1716 // The rest of the CEM config will be between the dual plane bit selecto r
1709 // and the texel weight grid. 1717 // and the texel weight grid.
1710 const int lowCEM = static_cast<int>(read_astc_bits(fBlock, 23, 29)); 1718 const int lowCEM = static_cast<int>(read_astc_bits(fBlock, 23, 29));
1711 SkASSERT(lastWeight - dualPlaneBitLoc > 31); 1719 SkASSERT(lastWeight >= dualPlaneBitLoc);
1720 SkASSERT(lastWeight - dualPlaneBitLoc < 31);
1712 int fullCEM = static_cast<int>(read_astc_bits(fBlock, dualPlaneBitLoc, l astWeight)); 1721 int fullCEM = static_cast<int>(read_astc_bits(fBlock, dualPlaneBitLoc, l astWeight));
1713 1722
1714 // Attach the config at the end of the weight grid to the CEM values 1723 // Attach the config at the end of the weight grid to the CEM values
1715 // in the beginning of the block. 1724 // in the beginning of the block.
1716 fullCEM = (fullCEM << 6) | lowCEM; 1725 fullCEM = (fullCEM << 6) | lowCEM;
1717 1726
1718 // Ignore the two least significant bits, since those are our baseCEM ab ove. 1727 // Ignore the two least significant bits, since those are our baseCEM ab ove.
1719 fullCEM = fullCEM >> 2; 1728 fullCEM = fullCEM >> 2;
1720 1729
1721 int C[kMaxPartitions]; // Next, decode C and M from the spec (Table C.2. 12) 1730 int C[kMaxPartitions]; // Next, decode C and M from the spec (Table C.2. 12)
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
2032 read_astc_block(&data, src); 2041 read_astc_block(&data, src);
2033 decompress_astc_block(reinterpret_cast<uint8_t*>(colorPtr + x), dstR owBytes, data); 2042 decompress_astc_block(reinterpret_cast<uint8_t*>(colorPtr + x), dstR owBytes, data);
2034 2043
2035 // ASTC encoded blocks are 16 bytes (128 bits) large. 2044 // ASTC encoded blocks are 16 bytes (128 bits) large.
2036 src += 16; 2045 src += 16;
2037 } 2046 }
2038 } 2047 }
2039 } 2048 }
2040 2049
2041 } // SkTextureCompressor 2050 } // SkTextureCompressor
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698