13e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen/* 23e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen * Copyright 2015 Google Inc. 33e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen * 43e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen * Use of this source code is governed by a BSD-style license that can be 53e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen * found in the LICENSE file. 63e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen */ 73e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 83e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#ifndef SK_COMMON_FLAGS_CONFIG_H 93e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#define SK_COMMON_FLAGS_CONFIG_H 103e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 113e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#include "SkCommandLineFlags.h" 123e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 133e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#if SK_SUPPORT_GPU 143e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#include "GrContextFactory.h" 153e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#endif 163e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 173e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunenDECLARE_string(config); 183e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 193e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#if SK_SUPPORT_GPU 203e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunenclass SkCommandLineConfigGpu; 213e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#endif 223e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 233e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen// SkCommandLineConfig represents a Skia rendering configuration string. 243e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen// The string has following form: 253e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen// tag: 263e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen// [via-]*backend 2711abd8d6cb2887bf66711863fb2dfe47da86d979bsalomon// where 'backend' consists of chars excluding hyphen 283e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen// and each 'via' consists of chars excluding hyphen. 293e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunenclass SkCommandLineConfig { 303e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen public: 313e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen SkCommandLineConfig(const SkString& tag, const SkString& backend, 323e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen const SkTArray<SkString>& viaParts); 333e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen virtual ~SkCommandLineConfig(); 343e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#if SK_SUPPORT_GPU 353e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen virtual const SkCommandLineConfigGpu* asConfigGpu() const { return nullptr; } 363e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#endif 373e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen const SkString& getTag() const { return fTag; } 383e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen const SkString& getBackend() const { return fBackend; } 393e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen const SkTArray<SkString>& getViaParts() const { return fViaParts; } 403e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen private: 413e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen SkString fTag; 423e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen SkString fBackend; 433e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen SkTArray<SkString> fViaParts; 443e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen}; 453e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 463e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#if SK_SUPPORT_GPU 473e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen// SkCommandLineConfigGpu is a SkCommandLineConfig that extracts information out of the backend 483e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen// part of the tag. It is constructed tags that have: 496405e71279e99731f89db69325c6763ec62a98e1Brian Salomon// * backends of form "gpu[option=value,option2=value,...]" 5050f66d805bcd424e34e1191a24a66b09e5611fe2Brian Salomon// * backends that represent a shorthand of above (such as "glmsaa16" representing 516405e71279e99731f89db69325c6763ec62a98e1Brian Salomon// "gpu(api=gl,samples=16)") 523e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunenclass SkCommandLineConfigGpu : public SkCommandLineConfig { 533e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen public: 5485b4b53e78dcdeae2a51935ca5e214b0f1a06492bsalomon typedef sk_gpu_test::GrContextFactory::ContextType ContextType; 55e812d496aaa5e5e9f2117de8f442c297c9cb1367csmartdalton typedef sk_gpu_test::GrContextFactory::ContextOverrides ContextOverrides; 563e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen SkCommandLineConfigGpu(const SkString& tag, const SkTArray<SkString>& viaParts, 57e0d362929d6569e8737d80dead791c640390e819csmartdalton ContextType contextType, bool useNVPR, bool useInstanced, bool useDIText, 58e0d362929d6569e8737d80dead791c640390e819csmartdalton int samples, SkColorType colorType, sk_sp<SkColorSpace> colorSpace); 593e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen const SkCommandLineConfigGpu* asConfigGpu() const override { return this; } 603e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen ContextType getContextType() const { return fContextType; } 61e812d496aaa5e5e9f2117de8f442c297c9cb1367csmartdalton ContextOverrides getContextOverrides() const { return fContextOverrides; } 62e812d496aaa5e5e9f2117de8f442c297c9cb1367csmartdalton bool getUseNVPR() const { 63e812d496aaa5e5e9f2117de8f442c297c9cb1367csmartdalton SkASSERT(!(fContextOverrides & ContextOverrides::kRequireNVPRSupport) || 64e812d496aaa5e5e9f2117de8f442c297c9cb1367csmartdalton !(fContextOverrides & ContextOverrides::kDisableNVPR)); 65e812d496aaa5e5e9f2117de8f442c297c9cb1367csmartdalton return fContextOverrides & ContextOverrides::kRequireNVPRSupport; 66e812d496aaa5e5e9f2117de8f442c297c9cb1367csmartdalton } 67e812d496aaa5e5e9f2117de8f442c297c9cb1367csmartdalton bool getUseInstanced() const { return fContextOverrides & ContextOverrides::kUseInstanced; } 683e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen bool getUseDIText() const { return fUseDIText; } 693e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen int getSamples() const { return fSamples; } 70d93c1208520376ec062c8e9b6b7e6d0eac6c6fafbrianosman SkColorType getColorType() const { return fColorType; } 71b109b8c5ec40a7dd85a0a2951a1f98fa63b805aabrianosman SkColorSpace* getColorSpace() const { return fColorSpace.get(); } 723e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 733e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen private: 743e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen ContextType fContextType; 75e812d496aaa5e5e9f2117de8f442c297c9cb1367csmartdalton ContextOverrides fContextOverrides; 763e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen bool fUseDIText; 773e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen int fSamples; 78d93c1208520376ec062c8e9b6b7e6d0eac6c6fafbrianosman SkColorType fColorType; 79b109b8c5ec40a7dd85a0a2951a1f98fa63b805aabrianosman sk_sp<SkColorSpace> fColorSpace; 803e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen}; 813e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#endif 823e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 83145dbcd165d9d27298eb8888bc240e2d06a95464Ben Wagnertypedef SkTArray<std::unique_ptr<SkCommandLineConfig>, true> SkCommandLineConfigArray; 843e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunenvoid ParseConfigs(const SkCommandLineFlags::StringArray& configList, 853e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen SkCommandLineConfigArray* outResult); 863e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen 873e980c3d88fbc509b79e7ccef16ca38f5bbfb180kkinnunen#endif 88