xref: /aosp_15_r20/external/skia/tools/flags/CommonFlagsConfig.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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