summaryrefslogtreecommitdiff
path: root/libs/hwui/ProgramCache.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/ProgramCache.h')
-rw-r--r--libs/hwui/ProgramCache.h30
1 files changed, 22 insertions, 8 deletions
diff --git a/libs/hwui/ProgramCache.h b/libs/hwui/ProgramCache.h
index 0a1705279e7f..4fa80111d358 100644
--- a/libs/hwui/ProgramCache.h
+++ b/libs/hwui/ProgramCache.h
@@ -44,9 +44,6 @@ namespace uirenderer {
#define PROGRAM_LOGD(...)
#endif
-/*
- * IMPORTANT: All 32 bits are used, switch to a long.
- */
#define PROGRAM_KEY_TEXTURE 0x1
#define PROGRAM_KEY_A8_TEXTURE 0x2
#define PROGRAM_KEY_BITMAP 0x4
@@ -70,14 +67,13 @@ namespace uirenderer {
#define PROGRAM_BITMAP_WRAPS_SHIFT 9
#define PROGRAM_BITMAP_WRAPT_SHIFT 11
+#define PROGRAM_GRADIENT_TYPE_SHIFT 33
+
///////////////////////////////////////////////////////////////////////////////
// Types
///////////////////////////////////////////////////////////////////////////////
-/*
- * IMPORTANT: All 32 bits are used, switch to a long.
- */
-typedef uint32_t programid;
+typedef uint64_t programid;
///////////////////////////////////////////////////////////////////////////////
// Cache
@@ -96,9 +92,16 @@ struct ProgramDescription {
kColorBlend
};
+ enum Gradient {
+ kGradientLinear,
+ kGradientCircular,
+ kGradientSweep
+ };
+
ProgramDescription():
hasTexture(false), hasAlpha8Texture(false),
hasBitmap(false), isBitmapNpot(false), hasGradient(false),
+ gradientType(kGradientLinear),
shadersMode(SkXfermode::kClear_Mode), isBitmapFirst(false),
bitmapWrapS(GL_CLAMP_TO_EDGE), bitmapWrapT(GL_CLAMP_TO_EDGE),
colorOp(kColorNone), colorMode(SkXfermode::kClear_Mode),
@@ -112,8 +115,12 @@ struct ProgramDescription {
// Shaders
bool hasBitmap;
bool isBitmapNpot;
+
bool hasGradient;
+ Gradient gradientType;
+
SkXfermode::Mode shadersMode;
+
bool isBitmapFirst;
GLenum bitmapWrapS;
GLenum bitmapWrapT;
@@ -152,7 +159,8 @@ struct ProgramDescription {
}
}
if (hasGradient) key |= PROGRAM_KEY_GRADIENT;
- if (isBitmapFirst) key |= PROGRAM_KEY_BITMAP_FIRST;
+ key |= programid(gradientType) << PROGRAM_GRADIENT_TYPE_SHIFT;
+ if (isBitmapFirst) key |= PROGRAM_KEY_BITMAP_FIRST;
if (hasBitmap && hasGradient) {
key |= (shadersMode & PROGRAM_MAX_XFERMODE) << PROGRAM_XFERMODE_SHADER_SHIFT;
}
@@ -174,6 +182,12 @@ struct ProgramDescription {
if (swapSrcDst) key |= PROGRAM_KEY_SWAP_SRC_DST;
return key;
}
+
+ void log(const char* message) const {
+ programid k = key();
+ PROGRAM_LOGD("%s (key = 0x%.8x%.8x)", message, uint32_t(k >> 32),
+ uint32_t(k & 0xffffffff));
+ }
}; // struct ProgramDescription
/**