GrShaderCaps.h revision c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59
1cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth/* 2cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * Copyright 2012 Google Inc. 3cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * 4cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * Use of this source code is governed by a BSD-style license that can be 5cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * found in the LICENSE file. 6cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth */ 7cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 8cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 9cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth#ifndef GrGLSLCaps_DEFINED 10cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth#define GrGLSLCaps_DEFINED 11cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 12cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth#include "GrCaps.h" 13cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth#include "GrGLSL.h" 14cdee009886babe6df7743a9b5b3e2cc0a5f21adfbsalomon#include "GrSwizzle.h" 15cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 16cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverthclass GrGLSLCaps : public GrShaderCaps { 17cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverthpublic: 182766c00fc0b6a07d46e5f74cdad45da2ef625237mtklein 19cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 20cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth /** 21cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * Indicates how GLSL must interact with advanced blend equations. The KHR extension requires 22cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * special layout qualifiers in the fragment shader. 23cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth */ 24cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth enum AdvBlendEqInteraction { 25cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth kNotSupported_AdvBlendEqInteraction, //<! No _blend_equation_advanced extension 26cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth kAutomatic_AdvBlendEqInteraction, //<! No interaction required 27cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth kGeneralEnable_AdvBlendEqInteraction, //<! layout(blend_support_all_equations) out 28cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth kSpecificEnables_AdvBlendEqInteraction, //<! Specific layout qualifiers per equation 29cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 30cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth kLast_AdvBlendEqInteraction = kSpecificEnables_AdvBlendEqInteraction 31cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth }; 32cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 33cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth /** 34cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * Initializes the GrGLSLCaps to a default set of features 35cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth */ 36cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth GrGLSLCaps(const GrContextOptions&); 37cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 38cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth /** 39cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * Some helper functions for encapsulating various extensions to read FB Buffer on openglES 40cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * 41cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * TODO(joshualitt) On desktop opengl 4.2+ we can achieve something similar to this effect 42cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth */ 43cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool fbFetchSupport() const { return fFBFetchSupport; } 44cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 45cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool fbFetchNeedsCustomOutput() const { return fFBFetchNeedsCustomOutput; } 46cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 47cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool bindlessTextureSupport() const { return fBindlessTextureSupport; } 48cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 49472d44e8f881f87449d11ba66515d3c1c5e69891egdaniel const char* versionDeclString() const { return fVersionDeclString; } 50472d44e8f881f87449d11ba66515d3c1c5e69891egdaniel 51cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth const char* fbFetchColorName() const { return fFBFetchColorName; } 52cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 53cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth const char* fbFetchExtensionString() const { return fFBFetchExtensionString; } 54cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 55cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool dropsTileOnZeroDivide() const { return fDropsTileOnZeroDivide; } 56cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 57c08f196648463d44eb85e17c5815dbf8f709a42acdalton bool flatInterpolationSupport() const { return fFlatInterpolationSupport; } 58c08f196648463d44eb85e17c5815dbf8f709a42acdalton 59c08f196648463d44eb85e17c5815dbf8f709a42acdalton bool noperspectiveInterpolationSupport() const { return fNoPerspectiveInterpolationSupport; } 60c08f196648463d44eb85e17c5815dbf8f709a42acdalton 614a98cdb7612493a062358cebd1141c9bcaa37ab1cdalton bool multisampleInterpolationSupport() const { return fMultisampleInterpolationSupport; } 624a98cdb7612493a062358cebd1141c9bcaa37ab1cdalton 6333ad701bc30387127c427fb1e38c781d5de33491cdalton bool sampleVariablesSupport() const { return fSampleVariablesSupport; } 6433ad701bc30387127c427fb1e38c781d5de33491cdalton 6533ad701bc30387127c427fb1e38c781d5de33491cdalton bool sampleMaskOverrideCoverageSupport() const { return fSampleMaskOverrideCoverageSupport; } 6633ad701bc30387127c427fb1e38c781d5de33491cdalton 679c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton bool externalTextureSupport() const { return fExternalTextureSupport; } 689c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton 69c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59cdalton bool bufferTextureSupport() const { return fBufferTextureSupport; } 70c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59cdalton 71cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth AdvBlendEqInteraction advBlendEqInteraction() const { return fAdvBlendEqInteraction; } 72cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 73cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool mustEnableAdvBlendEqs() const { 74cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth return fAdvBlendEqInteraction >= kGeneralEnable_AdvBlendEqInteraction; 75cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth } 76cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 77cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool mustEnableSpecificAdvBlendEqs() const { 78cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth return fAdvBlendEqInteraction == kSpecificEnables_AdvBlendEqInteraction; 79cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth } 80cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 81cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool mustDeclareFragmentShaderOutput() const { 82cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth return fGLSLGeneration > k110_GrGLSLGeneration; 83cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth } 84cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 85f529439fea003851d986a0573a7e0465754b2a48egdaniel bool usesPrecisionModifiers() const { return fUsesPrecisionModifiers; } 86f529439fea003851d986a0573a7e0465754b2a48egdaniel 87472d44e8f881f87449d11ba66515d3c1c5e69891egdaniel // Returns whether we can use the glsl funciton any() in our shader code. 88472d44e8f881f87449d11ba66515d3c1c5e69891egdaniel bool canUseAnyFunctionInShader() const { return fCanUseAnyFunctionInShader; } 89472d44e8f881f87449d11ba66515d3c1c5e69891egdaniel 908dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel bool canUseMinAndAbsTogether() const { return fCanUseMinAndAbsTogether; } 918dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel 928dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel bool mustForceNegatedAtanParamToFloat() const { return fMustForceNegatedAtanParamToFloat; } 938dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel 94574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel // Returns the string of an extension that must be enabled in the shader to support 95574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel // derivatives. If nullptr is returned then no extension needs to be enabled. Before calling 96574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel // this function, the caller should check that shaderDerivativeSupport exists. 97574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel const char* shaderDerivativeExtensionString() const { 98574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel SkASSERT(this->shaderDerivativeSupport()); 99574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel return fShaderDerivativeExtensionString; 100574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel } 10133ad701bc30387127c427fb1e38c781d5de33491cdalton 1028dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel // Returns the string of an extension that will do all necessary coord transfomations needed 1038dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel // when reading the fragment position. If such an extension does not exisits, this function 1048dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel // returns a nullptr, and all transforms of the frag position must be done manually in the 1058dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel // shader. 1068dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel const char* fragCoordConventionsExtensionString() const { 1078dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel return fFragCoordConventionsExtensionString; 1088dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel } 1098dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel 1108dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel // This returns the name of an extension that must be enabled in the shader, if such a thing is 1118dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel // required in order to use a secondary output in the shader. This returns a nullptr if no such 1128dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel // extension is required. However, the return value of this function does not say whether dual 1138dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel // source blending is supported. 1148dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel const char* secondaryOutputExtensionString() const { 1158dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel return fSecondaryOutputExtensionString; 1168dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel } 117574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel 1187ea33f5e1ae9eb1fb1e7377d6edf6acdcf71d103bsalomon const char* externalTextureExtensionString() const { 1199c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton SkASSERT(this->externalTextureSupport()); 1207ea33f5e1ae9eb1fb1e7377d6edf6acdcf71d103bsalomon return fExternalTextureExtensionString; 1217ea33f5e1ae9eb1fb1e7377d6edf6acdcf71d103bsalomon } 1227ea33f5e1ae9eb1fb1e7377d6edf6acdcf71d103bsalomon 123c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59cdalton const char* bufferTextureExtensionString() const { 124c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59cdalton SkASSERT(this->bufferTextureSupport()); 125c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59cdalton return fBufferTextureExtensionString; 126c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59cdalton } 127c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59cdalton 128c08f196648463d44eb85e17c5815dbf8f709a42acdalton const char* noperspectiveInterpolationExtensionString() const { 129c08f196648463d44eb85e17c5815dbf8f709a42acdalton SkASSERT(this->noperspectiveInterpolationSupport()); 130c08f196648463d44eb85e17c5815dbf8f709a42acdalton return fNoPerspectiveInterpolationExtensionString; 131c08f196648463d44eb85e17c5815dbf8f709a42acdalton } 132c08f196648463d44eb85e17c5815dbf8f709a42acdalton 1334a98cdb7612493a062358cebd1141c9bcaa37ab1cdalton const char* multisampleInterpolationExtensionString() const { 1344a98cdb7612493a062358cebd1141c9bcaa37ab1cdalton SkASSERT(this->multisampleInterpolationSupport()); 1354a98cdb7612493a062358cebd1141c9bcaa37ab1cdalton return fMultisampleInterpolationExtensionString; 1364a98cdb7612493a062358cebd1141c9bcaa37ab1cdalton } 1374a98cdb7612493a062358cebd1141c9bcaa37ab1cdalton 13833ad701bc30387127c427fb1e38c781d5de33491cdalton const char* sampleVariablesExtensionString() const { 13933ad701bc30387127c427fb1e38c781d5de33491cdalton SkASSERT(this->sampleVariablesSupport()); 14033ad701bc30387127c427fb1e38c781d5de33491cdalton return fSampleVariablesExtensionString; 14133ad701bc30387127c427fb1e38c781d5de33491cdalton } 14233ad701bc30387127c427fb1e38c781d5de33491cdalton 1439c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton int maxVertexSamplers() const { return fMaxVertexSamplers; } 1449c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton 1459c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton int maxGeometrySamplers() const { return fMaxGeometrySamplers; } 1469c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton 1479c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton int maxFragmentSamplers() const { return fMaxFragmentSamplers; } 1489c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton 1499c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton int maxCombinedSamplers() const { return fMaxCombinedSamplers; } 1509c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton 151b7e7d5748d74c7482436b33733d7770484bb62e3egdaniel /** 152cdee009886babe6df7743a9b5b3e2cc0a5f21adfbsalomon * Given a texture's config, this determines what swizzle must be appended to accesses to the 153cdee009886babe6df7743a9b5b3e2cc0a5f21adfbsalomon * texture in generated shader code. Swizzling may be implemented in texture parameters or a 1547f9b2e4a45775e8cdd3f98260a66c0c6e1840550bsalomon * sampler rather than in the shader. In this case the returned swizzle will always be "rgba". 155b7e7d5748d74c7482436b33733d7770484bb62e3egdaniel */ 156cdee009886babe6df7743a9b5b3e2cc0a5f21adfbsalomon const GrSwizzle& configTextureSwizzle(GrPixelConfig config) const { 157cdee009886babe6df7743a9b5b3e2cc0a5f21adfbsalomon return fConfigTextureSwizzle[config]; 158cdee009886babe6df7743a9b5b3e2cc0a5f21adfbsalomon } 159b7e7d5748d74c7482436b33733d7770484bb62e3egdaniel 1607f9b2e4a45775e8cdd3f98260a66c0c6e1840550bsalomon /** Swizzle that should occur on the fragment shader outputs for a given config. */ 1617f9b2e4a45775e8cdd3f98260a66c0c6e1840550bsalomon const GrSwizzle& configOutputSwizzle(GrPixelConfig config) const { 1627f9b2e4a45775e8cdd3f98260a66c0c6e1840550bsalomon return fConfigOutputSwizzle[config]; 1637f9b2e4a45775e8cdd3f98260a66c0c6e1840550bsalomon } 1647f9b2e4a45775e8cdd3f98260a66c0c6e1840550bsalomon 165cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth GrGLSLGeneration generation() const { return fGLSLGeneration; } 166cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 167cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth /** 168cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth * Returns a string containing the caps info. 169cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth */ 170cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth SkString dump() const override; 171cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 172cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverthprivate: 173b7e7d5748d74c7482436b33733d7770484bb62e3egdaniel void onApplyOptionsOverrides(const GrContextOptions& options) override; 174b7e7d5748d74c7482436b33733d7770484bb62e3egdaniel 175cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth GrGLSLGeneration fGLSLGeneration; 176cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 177cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool fDropsTileOnZeroDivide : 1; 178cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool fFBFetchSupport : 1; 179cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool fFBFetchNeedsCustomOutput : 1; 180cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth bool fBindlessTextureSupport : 1; 181f529439fea003851d986a0573a7e0465754b2a48egdaniel bool fUsesPrecisionModifiers : 1; 182472d44e8f881f87449d11ba66515d3c1c5e69891egdaniel bool fCanUseAnyFunctionInShader : 1; 183c08f196648463d44eb85e17c5815dbf8f709a42acdalton bool fFlatInterpolationSupport : 1; 184c08f196648463d44eb85e17c5815dbf8f709a42acdalton bool fNoPerspectiveInterpolationSupport : 1; 1854a98cdb7612493a062358cebd1141c9bcaa37ab1cdalton bool fMultisampleInterpolationSupport : 1; 18633ad701bc30387127c427fb1e38c781d5de33491cdalton bool fSampleVariablesSupport : 1; 18733ad701bc30387127c427fb1e38c781d5de33491cdalton bool fSampleMaskOverrideCoverageSupport : 1; 1889c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton bool fExternalTextureSupport : 1; 189c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59cdalton bool fBufferTextureSupport : 1; 190f529439fea003851d986a0573a7e0465754b2a48egdaniel 1918dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel // Used for specific driver bug work arounds 1928dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel bool fCanUseMinAndAbsTogether : 1; 1938dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel bool fMustForceNegatedAtanParamToFloat : 1; 1948dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel 195472d44e8f881f87449d11ba66515d3c1c5e69891egdaniel const char* fVersionDeclString; 196cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 197574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel const char* fShaderDerivativeExtensionString; 1988dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel const char* fFragCoordConventionsExtensionString; 1998dcdedc4a087ea46ce1e2458d335d60918e56310egdaniel const char* fSecondaryOutputExtensionString; 2007ea33f5e1ae9eb1fb1e7377d6edf6acdcf71d103bsalomon const char* fExternalTextureExtensionString; 201c04ce676d4516a8c64e29e1f60bb72cd2c6c0a59cdalton const char* fBufferTextureExtensionString; 202c08f196648463d44eb85e17c5815dbf8f709a42acdalton const char* fNoPerspectiveInterpolationExtensionString; 2034a98cdb7612493a062358cebd1141c9bcaa37ab1cdalton const char* fMultisampleInterpolationExtensionString; 20433ad701bc30387127c427fb1e38c781d5de33491cdalton const char* fSampleVariablesExtensionString; 205574a4c153d8a3f42b2806848f5c23cbf55e18bbbegdaniel 206cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth const char* fFBFetchColorName; 207cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth const char* fFBFetchExtensionString; 208cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 2099c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton uint8_t fMaxVertexSamplers; 2109c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton uint8_t fMaxGeometrySamplers; 2119c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton uint8_t fMaxFragmentSamplers; 2129c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton uint8_t fMaxCombinedSamplers; 2139c3f14327a38e79ab7d0cf30dfd9bf89676fde06cdalton 214cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth AdvBlendEqInteraction fAdvBlendEqInteraction; 215cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 216cdee009886babe6df7743a9b5b3e2cc0a5f21adfbsalomon GrSwizzle fConfigTextureSwizzle[kGrPixelConfigCnt]; 2177f9b2e4a45775e8cdd3f98260a66c0c6e1840550bsalomon GrSwizzle fConfigOutputSwizzle[kGrPixelConfigCnt]; 218b7e7d5748d74c7482436b33733d7770484bb62e3egdaniel 219cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth friend class GrGLCaps; // For initialization. 220fa8963252e122c5288c8e92b5ecc25a8fea21c3begdaniel friend class GrVkCaps; 221cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 222cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth typedef GrShaderCaps INHERITED; 223cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth}; 224cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth 225cba99b88fd5fb39def7a094dc32c0745c7a1cfeajvanverth#endif 226