1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2015 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SK_COMMON_FLAGS_CONFIG_H 9*c8dee2aaSAndroid Build Coastguard Worker #define SK_COMMON_FLAGS_CONFIG_H 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColorSpace.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "tools/flags/CommandLineFlags.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "tools/gpu/GrContextFactory.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker DECLARE_string(config); 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker class SkCommandLineConfigGpu; 18*c8dee2aaSAndroid Build Coastguard Worker class SkCommandLineConfigGraphite; 19*c8dee2aaSAndroid Build Coastguard Worker class SkCommandLineConfigSvg; 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker // SkCommandLineConfig represents a Skia rendering configuration string. 22*c8dee2aaSAndroid Build Coastguard Worker // The string has following form: 23*c8dee2aaSAndroid Build Coastguard Worker // tag: 24*c8dee2aaSAndroid Build Coastguard Worker // [via-]*backend 25*c8dee2aaSAndroid Build Coastguard Worker // where 'backend' consists of chars excluding hyphen 26*c8dee2aaSAndroid Build Coastguard Worker // and each 'via' consists of chars excluding hyphen. 27*c8dee2aaSAndroid Build Coastguard Worker class SkCommandLineConfig { 28*c8dee2aaSAndroid Build Coastguard Worker public: 29*c8dee2aaSAndroid Build Coastguard Worker SkCommandLineConfig(const SkString& tag, 30*c8dee2aaSAndroid Build Coastguard Worker const SkString& backend, 31*c8dee2aaSAndroid Build Coastguard Worker const skia_private::TArray<SkString>& viaParts); 32*c8dee2aaSAndroid Build Coastguard Worker virtual ~SkCommandLineConfig(); asConfigGpu()33*c8dee2aaSAndroid Build Coastguard Worker virtual const SkCommandLineConfigGpu* asConfigGpu() const { return nullptr; } asConfigGraphite()34*c8dee2aaSAndroid Build Coastguard Worker virtual const SkCommandLineConfigGraphite* asConfigGraphite() const { return nullptr; } asConfigSvg()35*c8dee2aaSAndroid Build Coastguard Worker virtual const SkCommandLineConfigSvg* asConfigSvg() const { return nullptr; } getTag()36*c8dee2aaSAndroid Build Coastguard Worker const SkString& getTag() const { return fTag; } getBackend()37*c8dee2aaSAndroid Build Coastguard Worker const SkString& getBackend() const { return fBackend; } refColorSpace()38*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkColorSpace> refColorSpace() const { return fColorSpace; } getViaParts()39*c8dee2aaSAndroid Build Coastguard Worker const skia_private::TArray<SkString>& getViaParts() const { return fViaParts; } 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker private: 42*c8dee2aaSAndroid Build Coastguard Worker SkString fTag; 43*c8dee2aaSAndroid Build Coastguard Worker SkString fBackend; 44*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkColorSpace> fColorSpace; 45*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<SkString> fViaParts; 46*c8dee2aaSAndroid Build Coastguard Worker }; 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker // SkCommandLineConfigGpu is a SkCommandLineConfig that extracts information out of the backend 49*c8dee2aaSAndroid Build Coastguard Worker // part of the tag. It is constructed tags that have: 50*c8dee2aaSAndroid Build Coastguard Worker // * backends of form "gpu[option=value,option2=value,...]" 51*c8dee2aaSAndroid Build Coastguard Worker // * backends that represent a shorthand of above (such as "glmsaa16" representing 52*c8dee2aaSAndroid Build Coastguard Worker // "gpu(api=gl,samples=16)") 53*c8dee2aaSAndroid Build Coastguard Worker class SkCommandLineConfigGpu : public SkCommandLineConfig { 54*c8dee2aaSAndroid Build Coastguard Worker public: 55*c8dee2aaSAndroid Build Coastguard Worker enum class SurfType { kDefault, kBackendTexture, kBackendRenderTarget }; 56*c8dee2aaSAndroid Build Coastguard Worker typedef skgpu::ContextType ContextType; 57*c8dee2aaSAndroid Build Coastguard Worker typedef sk_gpu_test::GrContextFactory::ContextOverrides ContextOverrides; 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker SkCommandLineConfigGpu(const SkString& tag, 60*c8dee2aaSAndroid Build Coastguard Worker const skia_private::TArray<SkString>& viaParts, 61*c8dee2aaSAndroid Build Coastguard Worker ContextType contextType, 62*c8dee2aaSAndroid Build Coastguard Worker bool fakeGLESVer2, 63*c8dee2aaSAndroid Build Coastguard Worker uint32_t surfaceFlags, 64*c8dee2aaSAndroid Build Coastguard Worker int samples, 65*c8dee2aaSAndroid Build Coastguard Worker SkColorType colorType, 66*c8dee2aaSAndroid Build Coastguard Worker SkAlphaType alphaType, 67*c8dee2aaSAndroid Build Coastguard Worker bool useStencilBuffers, 68*c8dee2aaSAndroid Build Coastguard Worker int testPersistentCache, 69*c8dee2aaSAndroid Build Coastguard Worker bool testPrecompile, 70*c8dee2aaSAndroid Build Coastguard Worker bool useDDLSink, 71*c8dee2aaSAndroid Build Coastguard Worker bool slug, 72*c8dee2aaSAndroid Build Coastguard Worker bool serializedSlug, 73*c8dee2aaSAndroid Build Coastguard Worker bool remoteSlug, 74*c8dee2aaSAndroid Build Coastguard Worker bool reducedShaders, 75*c8dee2aaSAndroid Build Coastguard Worker SurfType); 76*c8dee2aaSAndroid Build Coastguard Worker asConfigGpu()77*c8dee2aaSAndroid Build Coastguard Worker const SkCommandLineConfigGpu* asConfigGpu() const override { return this; } getContextType()78*c8dee2aaSAndroid Build Coastguard Worker ContextType getContextType() const { return fContextType; } getContextOverrides()79*c8dee2aaSAndroid Build Coastguard Worker ContextOverrides getContextOverrides() const { return fContextOverrides; } getSurfaceFlags()80*c8dee2aaSAndroid Build Coastguard Worker uint32_t getSurfaceFlags() const { return fSurfaceFlags; } getSamples()81*c8dee2aaSAndroid Build Coastguard Worker int getSamples() const { return fSamples; } getColorType()82*c8dee2aaSAndroid Build Coastguard Worker SkColorType getColorType() const { return fColorType; } getAlphaType()83*c8dee2aaSAndroid Build Coastguard Worker SkAlphaType getAlphaType() const { return fAlphaType; } getTestPersistentCache()84*c8dee2aaSAndroid Build Coastguard Worker int getTestPersistentCache() const { return fTestPersistentCache; } getTestPrecompile()85*c8dee2aaSAndroid Build Coastguard Worker bool getTestPrecompile() const { return fTestPrecompile; } getUseDDLSink()86*c8dee2aaSAndroid Build Coastguard Worker bool getUseDDLSink() const { return fUseDDLSink; } getSlug()87*c8dee2aaSAndroid Build Coastguard Worker bool getSlug() const { return fSlug; } getSerializedSlug()88*c8dee2aaSAndroid Build Coastguard Worker bool getSerializedSlug() const { return fSerializeSlug; } getRemoteSlug()89*c8dee2aaSAndroid Build Coastguard Worker bool getRemoteSlug() const { return fRemoteSlug; } getReducedShaders()90*c8dee2aaSAndroid Build Coastguard Worker bool getReducedShaders() const { return fReducedShaders; } getSurfType()91*c8dee2aaSAndroid Build Coastguard Worker SurfType getSurfType() const { return fSurfType; } 92*c8dee2aaSAndroid Build Coastguard Worker 93*c8dee2aaSAndroid Build Coastguard Worker private: 94*c8dee2aaSAndroid Build Coastguard Worker ContextType fContextType; 95*c8dee2aaSAndroid Build Coastguard Worker ContextOverrides fContextOverrides; 96*c8dee2aaSAndroid Build Coastguard Worker uint32_t fSurfaceFlags; 97*c8dee2aaSAndroid Build Coastguard Worker int fSamples; 98*c8dee2aaSAndroid Build Coastguard Worker SkColorType fColorType; 99*c8dee2aaSAndroid Build Coastguard Worker SkAlphaType fAlphaType; 100*c8dee2aaSAndroid Build Coastguard Worker int fTestPersistentCache; 101*c8dee2aaSAndroid Build Coastguard Worker bool fTestPrecompile; 102*c8dee2aaSAndroid Build Coastguard Worker bool fUseDDLSink; 103*c8dee2aaSAndroid Build Coastguard Worker bool fSlug; 104*c8dee2aaSAndroid Build Coastguard Worker bool fSerializeSlug; 105*c8dee2aaSAndroid Build Coastguard Worker bool fRemoteSlug; 106*c8dee2aaSAndroid Build Coastguard Worker bool fReducedShaders; 107*c8dee2aaSAndroid Build Coastguard Worker SurfType fSurfType; 108*c8dee2aaSAndroid Build Coastguard Worker }; 109*c8dee2aaSAndroid Build Coastguard Worker 110*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GRAPHITE) 111*c8dee2aaSAndroid Build Coastguard Worker 112*c8dee2aaSAndroid Build Coastguard Worker #include "tools/graphite/ContextFactory.h" 113*c8dee2aaSAndroid Build Coastguard Worker 114*c8dee2aaSAndroid Build Coastguard Worker class SkCommandLineConfigGraphite : public SkCommandLineConfig { 115*c8dee2aaSAndroid Build Coastguard Worker public: 116*c8dee2aaSAndroid Build Coastguard Worker using ContextType = skgpu::ContextType; 117*c8dee2aaSAndroid Build Coastguard Worker SkCommandLineConfigGraphite(const SkString & tag,const skia_private::TArray<SkString> & viaParts,ContextType contextType,SkColorType colorType,SkAlphaType alphaType,bool testPrecompile)118*c8dee2aaSAndroid Build Coastguard Worker SkCommandLineConfigGraphite(const SkString& tag, 119*c8dee2aaSAndroid Build Coastguard Worker const skia_private::TArray<SkString>& viaParts, 120*c8dee2aaSAndroid Build Coastguard Worker ContextType contextType, 121*c8dee2aaSAndroid Build Coastguard Worker SkColorType colorType, 122*c8dee2aaSAndroid Build Coastguard Worker SkAlphaType alphaType, 123*c8dee2aaSAndroid Build Coastguard Worker bool testPrecompile) 124*c8dee2aaSAndroid Build Coastguard Worker : SkCommandLineConfig(tag, SkString("graphite"), viaParts) 125*c8dee2aaSAndroid Build Coastguard Worker , fContextType(contextType) 126*c8dee2aaSAndroid Build Coastguard Worker , fColorType(colorType) 127*c8dee2aaSAndroid Build Coastguard Worker , fAlphaType(alphaType) 128*c8dee2aaSAndroid Build Coastguard Worker , fTestPrecompile(testPrecompile) { 129*c8dee2aaSAndroid Build Coastguard Worker } asConfigGraphite()130*c8dee2aaSAndroid Build Coastguard Worker const SkCommandLineConfigGraphite* asConfigGraphite() const override { return this; } 131*c8dee2aaSAndroid Build Coastguard Worker getContextType()132*c8dee2aaSAndroid Build Coastguard Worker ContextType getContextType() const { return fContextType; } getColorType()133*c8dee2aaSAndroid Build Coastguard Worker SkColorType getColorType() const { return fColorType; } getAlphaType()134*c8dee2aaSAndroid Build Coastguard Worker SkAlphaType getAlphaType() const { return fAlphaType; } getTestPrecompile()135*c8dee2aaSAndroid Build Coastguard Worker bool getTestPrecompile() const { return fTestPrecompile; } 136*c8dee2aaSAndroid Build Coastguard Worker 137*c8dee2aaSAndroid Build Coastguard Worker private: 138*c8dee2aaSAndroid Build Coastguard Worker ContextType fContextType; 139*c8dee2aaSAndroid Build Coastguard Worker SkColorType fColorType; 140*c8dee2aaSAndroid Build Coastguard Worker SkAlphaType fAlphaType; 141*c8dee2aaSAndroid Build Coastguard Worker bool fTestPrecompile; 142*c8dee2aaSAndroid Build Coastguard Worker }; 143*c8dee2aaSAndroid Build Coastguard Worker 144*c8dee2aaSAndroid Build Coastguard Worker #endif // SK_GRAPHITE 145*c8dee2aaSAndroid Build Coastguard Worker 146*c8dee2aaSAndroid Build Coastguard Worker // SkCommandLineConfigSvg is a SkCommandLineConfig that extracts information out of the backend 147*c8dee2aaSAndroid Build Coastguard Worker // part of the tag. It is constructed tags that have: 148*c8dee2aaSAndroid Build Coastguard Worker // * backends of form "svg[option=value,option2=value,...]" 149*c8dee2aaSAndroid Build Coastguard Worker class SkCommandLineConfigSvg : public SkCommandLineConfig { 150*c8dee2aaSAndroid Build Coastguard Worker public: 151*c8dee2aaSAndroid Build Coastguard Worker SkCommandLineConfigSvg(const SkString& tag, const skia_private::TArray<SkString>& viaParts, int pageIndex); asConfigSvg()152*c8dee2aaSAndroid Build Coastguard Worker const SkCommandLineConfigSvg* asConfigSvg() const override { return this; } 153*c8dee2aaSAndroid Build Coastguard Worker getPageIndex()154*c8dee2aaSAndroid Build Coastguard Worker int getPageIndex() const { return fPageIndex; } 155*c8dee2aaSAndroid Build Coastguard Worker 156*c8dee2aaSAndroid Build Coastguard Worker private: 157*c8dee2aaSAndroid Build Coastguard Worker int fPageIndex; 158*c8dee2aaSAndroid Build Coastguard Worker }; 159*c8dee2aaSAndroid Build Coastguard Worker 160*c8dee2aaSAndroid Build Coastguard Worker typedef skia_private::TArray<std::unique_ptr<SkCommandLineConfig>, true> SkCommandLineConfigArray; 161*c8dee2aaSAndroid Build Coastguard Worker void ParseConfigs(const CommandLineFlags::StringArray& configList, 162*c8dee2aaSAndroid Build Coastguard Worker SkCommandLineConfigArray* outResult); 163*c8dee2aaSAndroid Build Coastguard Worker 164*c8dee2aaSAndroid Build Coastguard Worker #endif 165