Index: src/gpu/gl/GrGLGpu.cpp |
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp |
index a0809c1d7a447ab03b609bbe58f68fee7fc0788e..38beaf718a75bb74fa931af0b244a61868d85c15 100644 |
--- a/src/gpu/gl/GrGLGpu.cpp |
+++ b/src/gpu/gl/GrGLGpu.cpp |
@@ -2396,6 +2396,22 @@ static inline GrGLenum tile_to_gl_wrap(SkShader::TileMode tm) { |
return gWrapModes[tm]; |
} |
+const GrGLenum* GrGLGpu::GetTexParamSwizzle(GrPixelConfig config, const GrGLCaps& caps) { |
+ if (caps.glslCaps()->textureSwizzleSupport() && GrPixelConfigIsAlphaOnly(config)) { |
+ if (caps.glslCaps()->textureRedSupport()) { |
+ static const GrGLenum gRedSmear[] = { GR_GL_RED, GR_GL_RED, GR_GL_RED, GR_GL_RED }; |
+ return gRedSmear; |
+ } else { |
+ static const GrGLenum gAlphaSmear[] = { GR_GL_ALPHA, GR_GL_ALPHA, |
+ GR_GL_ALPHA, GR_GL_ALPHA }; |
+ return gAlphaSmear; |
+ } |
+ } else { |
+ static const GrGLenum gStraight[] = { GR_GL_RED, GR_GL_GREEN, GR_GL_BLUE, GR_GL_ALPHA }; |
+ return gStraight; |
+ } |
+} |
+ |
void GrGLGpu::bindTexture(int unitIdx, const GrTextureParams& params, GrGLTexture* texture) { |
SkASSERT(texture); |
@@ -2462,7 +2478,7 @@ void GrGLGpu::bindTexture(int unitIdx, const GrTextureParams& params, GrGLTextur |
newTexParams.fWrapS = tile_to_gl_wrap(params.getTileModeX()); |
newTexParams.fWrapT = tile_to_gl_wrap(params.getTileModeY()); |
memcpy(newTexParams.fSwizzleRGBA, |
- GrGLShaderBuilder::GetTexParamSwizzle(texture->config(), this->glCaps()), |
+ GetTexParamSwizzle(texture->config(), this->glCaps()), |
sizeof(newTexParams.fSwizzleRGBA)); |
if (setAll || newTexParams.fMagFilter != oldTexParams.fMagFilter) { |
this->setTextureUnit(unitIdx); |
@@ -2480,7 +2496,7 @@ void GrGLGpu::bindTexture(int unitIdx, const GrTextureParams& params, GrGLTextur |
this->setTextureUnit(unitIdx); |
GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_T, newTexParams.fWrapT)); |
} |
- if (this->glCaps().textureSwizzleSupport() && |
+ if (this->glCaps().glslCaps()->textureSwizzleSupport() && |
(setAll || memcmp(newTexParams.fSwizzleRGBA, |
oldTexParams.fSwizzleRGBA, |
sizeof(newTexParams.fSwizzleRGBA)))) { |
@@ -2636,7 +2652,7 @@ bool GrGLGpu::configToGLFormats(GrPixelConfig config, |
*internalFormat = GR_GL_PALETTE8_RGBA8; |
break; |
case kAlpha_8_GrPixelConfig: |
- if (this->glCaps().textureRedSupport()) { |
+ if (this->glCaps().glslCaps()->textureRedSupport()) { |
*internalFormat = GR_GL_RED; |
*externalFormat = GR_GL_RED; |
if (getSizedInternalFormat) { |
@@ -2687,7 +2703,7 @@ bool GrGLGpu::configToGLFormats(GrPixelConfig config, |
break; |
case kAlpha_half_GrPixelConfig: |
- if (this->glCaps().textureRedSupport()) { |
+ if (this->glCaps().glslCaps()->textureRedSupport()) { |
if (getSizedInternalFormat) { |
*internalFormat = GR_GL_R16F; |
} else { |