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