Merge "Fix unsafety in SkiaShader storage, and texture unit accounting" into mnc-dev
diff --git a/libs/hwui/SkiaShader.cpp b/libs/hwui/SkiaShader.cpp
index 2cfb9e1..a2aa2d1 100644
--- a/libs/hwui/SkiaShader.cpp
+++ b/libs/hwui/SkiaShader.cpp
@@ -370,7 +370,11 @@
     if (tryStoreLayer(caches, shader, modelViewMatrix,
             textureUnit, description, &outData->layerData)) {
         outData->skiaShaderType = kLayer_SkiaShaderType;
+        return;
     }
+
+    // Unknown/unsupported type, so explicitly ignore shader
+    outData->skiaShaderType = kNone_SkiaShaderType;
 }
 
 void SkiaShader::apply(Caches& caches, const SkiaShaderData& data) {
diff --git a/libs/hwui/renderstate/TextureState.cpp b/libs/hwui/renderstate/TextureState.cpp
index a211de7..987d4cd 100644
--- a/libs/hwui/renderstate/TextureState.cpp
+++ b/libs/hwui/renderstate/TextureState.cpp
@@ -22,7 +22,8 @@
 const GLenum kTextureUnits[] = {
     GL_TEXTURE0,
     GL_TEXTURE1,
-    GL_TEXTURE2
+    GL_TEXTURE2,
+    GL_TEXTURE3
 };
 
 TextureState::TextureState()
@@ -33,10 +34,13 @@
     GLint maxTextureUnits;
     glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
     LOG_ALWAYS_FATAL_IF(maxTextureUnits < kTextureUnitsCount,
-        "At least %d texture units are required!", kTextureUnitsCount);
+            "At least %d texture units are required!", kTextureUnitsCount);
 }
 
 void TextureState::activateTexture(GLuint textureUnit) {
+    LOG_ALWAYS_FATAL_IF(textureUnit >= kTextureUnitsCount,
+            "Tried to use texture unit index %d, only %d exist",
+            textureUnit, kTextureUnitsCount);
     if (mTextureUnit != textureUnit) {
         glActiveTexture(kTextureUnits[textureUnit]);
         mTextureUnit = textureUnit;
diff --git a/libs/hwui/renderstate/TextureState.h b/libs/hwui/renderstate/TextureState.h
index 5a57b9f..d3c014c 100644
--- a/libs/hwui/renderstate/TextureState.h
+++ b/libs/hwui/renderstate/TextureState.h
@@ -73,7 +73,7 @@
     void unbindTexture(GLuint texture);
 private:
     // total number of texture units available for use
-    static const int kTextureUnitsCount = 3;
+    static const int kTextureUnitsCount = 4;
 
     TextureState();
     GLuint mTextureUnit;