diff options
author | 2015-11-03 08:15:28 -0800 | |
---|---|---|
committer | 2015-11-03 08:15:29 -0800 | |
commit | 4036674952f341dab0695c3b054fefa5bb8cdec1 (patch) | |
tree | 73629dadb61dff6ce5c730ce71e883b919a73027 /src/gpu/gl/GrGLProgramDesc.cpp | |
parent | 501b7344f116ccc821d437d324aa7883d7ce97bf (diff) |
Create swizzle table inside of glsl caps
BUG=skia:
Review URL: https://codereview.chromium.org/1420033005
Diffstat (limited to 'src/gpu/gl/GrGLProgramDesc.cpp')
-rw-r--r-- | src/gpu/gl/GrGLProgramDesc.cpp | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/src/gpu/gl/GrGLProgramDesc.cpp b/src/gpu/gl/GrGLProgramDesc.cpp index a232a63514..8ff25575c6 100644 --- a/src/gpu/gl/GrGLProgramDesc.cpp +++ b/src/gpu/gl/GrGLProgramDesc.cpp @@ -18,26 +18,14 @@ * present in the texture's config. swizzleComponentMask indicates the channels present in the * shader swizzle. */ -static bool swizzle_requires_alpha_remapping(const GrGLCaps& caps, - uint32_t configComponentMask, - uint32_t swizzleComponentMask) { - if (caps.textureSwizzleSupport()) { +static bool swizzle_requires_alpha_remapping(const GrGLSLCaps& caps, GrPixelConfig config) { + if (!caps.mustSwizzleInShader()) { // Any remapping is handled using texture swizzling not shader modifications. return false; } - // check if the texture is alpha-only - if (kA_GrColorComponentFlag == configComponentMask) { - if (caps.textureRedSupport() && (kA_GrColorComponentFlag & swizzleComponentMask)) { - // we must map the swizzle 'a's to 'r'. - return true; - } - if (kRGB_GrColorComponentFlags & swizzleComponentMask) { - // The 'r', 'g', and/or 'b's must be mapped to 'a' according to our semantics that - // alpha-only textures smear alpha across all four channels when read. - return true; - } - } - return false; + const char* swizzleMap = caps.getSwizzleMap(config); + + return SkToBool(memcmp(swizzleMap, "rgba", 4)); } static uint32_t gen_texture_key(const GrProcessor& proc, const GrGLCaps& caps) { @@ -45,8 +33,7 @@ static uint32_t gen_texture_key(const GrProcessor& proc, const GrGLCaps& caps) { int numTextures = proc.numTextures(); for (int t = 0; t < numTextures; ++t) { const GrTextureAccess& access = proc.textureAccess(t); - uint32_t configComponentMask = GrPixelConfigComponentMask(access.getTexture()->config()); - if (swizzle_requires_alpha_remapping(caps, configComponentMask, access.swizzleMask())) { + if (swizzle_requires_alpha_remapping(*caps.glslCaps(), access.getTexture()->config())) { key |= 1 << t; } } |