static uint32_t gen_texture_key(const GrProcessor& proc, const GrGLCaps& caps) { uint32_t key = 0; int numTextures = proc.numTextures(); int shift = 0; for (int t = 0; t < numTextures; ++t) { const GrTextureAccess& access = proc.textureAccess(t); if (swizzle_requires_alpha_remapping(*caps.glslCaps(), access.getTexture()->config())) { key |= 1 << shift; } if (GR_GL_TEXTURE_EXTERNAL == static_cast<GrGLTexture*>(access.getTexture())->target()) { key |= 2 << shift; } shift += 2; } return key; }
/* * TODO: A better name for this function would be "compute" instead of "get". */ static bool get_frag_proc_and_meta_keys(const GrPrimitiveProcessor& primProc, const GrFragmentProcessor& fp, const GrGLCaps& caps, GrProcessorKeyBuilder* b) { for (int i = 0; i < fp.numChildProcessors(); ++i) { if (!get_frag_proc_and_meta_keys(primProc, fp.childProcessor(i), caps, b)) { return false; } } fp.getGLProcessorKey(*caps.glslCaps(), b); //**** use glslCaps here? return get_meta_key(fp, caps, primProc.getTransformKey(fp.coordTransforms(), fp.numTransformsExclChildren()), b); }
GrGLFragmentShaderBuilder::DstReadKey GrGLFragmentShaderBuilder::KeyForDstRead(const GrTexture* dstTexture, const GrGLCaps& caps) { uint32_t key = kYesDstRead_DstReadKeyBit; if (caps.glslCaps()->fbFetchSupport()) { return key; } SkASSERT(dstTexture); if (!caps.textureSwizzleSupport() && GrPixelConfigIsAlphaOnly(dstTexture->config())) { // The fact that the config is alpha-only must be considered when generating code. key |= kUseAlphaConfig_DstReadKeyBit; } if (kTopLeft_GrSurfaceOrigin == dstTexture->origin()) { key |= kTopLeftOrigin_DstReadKeyBit; } SkASSERT(static_cast<DstReadKey>(key) == key); return static_cast<DstReadKey>(key); }