Clamp gradient textures to max GL texture size

Change-Id: I8ce4e50988f5194fe5ce4bde7945ec01673af3cd
diff --git a/libs/hwui/GradientCache.cpp b/libs/hwui/GradientCache.cpp
index 0016b81..c7ab9c5 100644
--- a/libs/hwui/GradientCache.cpp
+++ b/libs/hwui/GradientCache.cpp
@@ -16,8 +16,6 @@
 
 #define LOG_TAG "OpenGLRenderer"
 
-#include <GLES2/gl2.h>
-
 #include <SkCanvas.h>
 #include <SkGradientShader.h>
 
@@ -45,6 +43,8 @@
         INIT_LOGD("  Using default gradient cache size of %.2fMB", DEFAULT_GRADIENT_CACHE_SIZE);
     }
 
+    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
+
     mCache.setOnEntryRemovedListener(this);
 }
 
@@ -116,8 +116,11 @@
 
 Texture* GradientCache::addLinearGradient(GradientCacheEntry& gradient,
         uint32_t* colors, float* positions, int count, SkShader::TileMode tileMode) {
+    int width = 256 * (count - 1);
+    width = width < mMaxTextureSize ? width : mMaxTextureSize;
+
     SkBitmap bitmap;
-    bitmap.setConfig(SkBitmap::kARGB_8888_Config, 256 * (count - 1), 1);
+    bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, 1);
     bitmap.allocPixels();
     bitmap.eraseColor(0);