diff options
author | Chris Craik <ccraik@google.com> | 2015-07-14 16:57:58 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-07-14 16:58:01 +0000 |
commit | 941bcedb4c03832cd54225217697c7b8cba6e07c (patch) | |
tree | ebb470d2e2b3099a1a71cae94b3b5dca9619b9db /libs | |
parent | 10633c96b55d13f05304b758b01be48035adece3 (diff) | |
parent | e310f83d591dc3fb7bd5c684239481a586f00662 (diff) | |
download | frameworks_base-941bcedb4c03832cd54225217697c7b8cba6e07c.zip frameworks_base-941bcedb4c03832cd54225217697c7b8cba6e07c.tar.gz frameworks_base-941bcedb4c03832cd54225217697c7b8cba6e07c.tar.bz2 |
Merge "Fix unsafety in SkiaShader storage, and texture unit accounting" into mnc-dev
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/SkiaShader.cpp | 4 | ||||
-rw-r--r-- | libs/hwui/renderstate/TextureState.cpp | 8 | ||||
-rw-r--r-- | libs/hwui/renderstate/TextureState.h | 2 |
3 files changed, 11 insertions, 3 deletions
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 @@ void SkiaShader::store(Caches& caches, const SkShader& shader, const Matrix4& mo 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 @@ namespace uirenderer { const GLenum kTextureUnits[] = { GL_TEXTURE0, GL_TEXTURE1, - GL_TEXTURE2 + GL_TEXTURE2, + GL_TEXTURE3 }; TextureState::TextureState() @@ -33,10 +34,13 @@ TextureState::TextureState() 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 @@ public: 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; |