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

Unified Diff: src/utils/SkTextureCompressor_ASTC.cpp

Issue 427693002: Add function for creating ASTC blitter (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Naming conventions Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/utils/SkTextureCompressor.cpp ('k') | src/utils/SkTextureCompressor_Blitter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/utils/SkTextureCompressor_ASTC.cpp
diff --git a/src/utils/SkTextureCompressor_ASTC.cpp b/src/utils/SkTextureCompressor_ASTC.cpp
index 774fd157feda2a3d4e6b51d3d81483ed248cdbdd..402588e746aefd6ceac4e08e1cffe5fb093adc09 100644
--- a/src/utils/SkTextureCompressor_ASTC.cpp
+++ b/src/utils/SkTextureCompressor_ASTC.cpp
@@ -6,6 +6,7 @@
*/
#include "SkTextureCompressor_ASTC.h"
+#include "SkTextureCompressor_Blitter.h"
#include "SkBlitter.h"
#include "SkEndian.h"
@@ -132,13 +133,17 @@ static const int8_t k6x5To12x12Table[30][60] = {
// Returns the alpha value of a texel at position (x, y) from src.
// (x, y) are assumed to be in the range [0, 12).
-static inline uint8_t get_alpha(const uint8_t *src, int rowBytes, int x, int y) {
+inline uint8_t GetAlpha(const uint8_t *src, int rowBytes, int x, int y) {
SkASSERT(x >= 0 && x < 12);
SkASSERT(y >= 0 && y < 12);
SkASSERT(rowBytes >= 12);
return *(src + y*rowBytes + x);
}
+inline uint8_t GetAlphaTranspose(const uint8_t *src, int rowBytes, int x, int y) {
+ return GetAlpha(src, rowBytes, y, x);
+}
+
// Output the 16 bytes stored in top and bottom and advance the pointer. The bytes
// are stored as the integers are represented in memory, so they should be swapped
// if necessary.
@@ -151,6 +156,9 @@ static inline void send_packing(uint8_t** dst, const uint64_t top, const uint64_
// Compresses an ASTC block, by looking up the proper contributions from
// k6x5To12x12Table and computing an index from the associated values.
+typedef uint8_t (*GetAlphaProc)(const uint8_t* src, int rowBytes, int x, int y);
+
+template<GetAlphaProc getAlphaProc>
static void compress_a8_astc_block(uint8_t** dst, const uint8_t* src, int rowBytes) {
// Check for single color
bool constant = true;
@@ -186,7 +194,7 @@ static void compress_a8_astc_block(uint8_t** dst, const uint8_t* src, int rowByt
const int x = k6x5To12x12Table[idx][w*3 + 1];
const int y = k6x5To12x12Table[idx][w*3 + 2];
weightTot += weight;
- alphaTot += weight * get_alpha(src, rowBytes, x, y);
+ alphaTot += weight * getAlphaProc(src, rowBytes, x, y);
} else {
// In our table, not every entry has 20 weights, and all
// of them are nonzero. Once we hit a negative weight, we
@@ -248,6 +256,10 @@ static void compress_a8_astc_block(uint8_t** dst, const uint8_t* src, int rowByt
send_packing(dst, SkEndian_SwapLE64(top), SkEndian_SwapLE64(bottom));
}
+inline void compress_a8_astc_block_vertical(uint8_t* dst, const uint8_t* src) {
+ compress_a8_astc_block<GetAlphaTranspose>(&dst, src, 12);
+}
+
////////////////////////////////////////////////////////////////////////////////
namespace SkTextureCompressor {
@@ -260,7 +272,7 @@ bool CompressA8To12x12ASTC(uint8_t* dst, const uint8_t* src, int width, int heig
uint8_t** dstPtr = &dst;
for (int y = 0; y < height; y+=12) {
for (int x = 0; x < width; x+=12) {
- compress_a8_astc_block(dstPtr, src + y*rowBytes + x, rowBytes);
+ compress_a8_astc_block<GetAlpha>(dstPtr, src + y*rowBytes + x, rowBytes);
}
}
@@ -268,8 +280,9 @@ bool CompressA8To12x12ASTC(uint8_t* dst, const uint8_t* src, int width, int heig
}
SkBlitter* CreateASTCBlitter(int width, int height, void* outputBuffer) {
- // TODO (krajcevski)
- return NULL;
+ return new
+ SkTCompressedAlphaBlitter<12, 16, compress_a8_astc_block_vertical>
+ (width, height, outputBuffer);
}
} // SkTextureCompressor
« no previous file with comments | « src/utils/SkTextureCompressor.cpp ('k') | src/utils/SkTextureCompressor_Blitter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698