Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2015 Google Inc. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
| 7 | |
| 8 | #ifndef SK_COMMON_FLAGS_CONFIG_H |
| 9 | #define SK_COMMON_FLAGS_CONFIG_H |
| 10 | |
Herb Derby | 3724b59 | 2022-12-05 17:08:03 -0500 | [diff] [blame] | 11 | #include "include/core/SkColorSpace.h" |
Mike Klein | c0bd9f9 | 2019-04-23 12:05:21 -0500 | [diff] [blame] | 12 | #include "tools/flags/CommandLineFlags.h" |
| 13 | #include "tools/gpu/GrContextFactory.h" |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 14 | |
| 15 | DECLARE_string(config); |
| 16 | |
| 17 | class SkCommandLineConfigGpu; |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 18 | class SkCommandLineConfigGraphite; |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 19 | class SkCommandLineConfigSvg; |
| 20 | |
| 21 | // SkCommandLineConfig represents a Skia rendering configuration string. |
| 22 | // The string has following form: |
| 23 | // tag: |
| 24 | // [via-]*backend |
| 25 | // where 'backend' consists of chars excluding hyphen |
| 26 | // and each 'via' consists of chars excluding hyphen. |
| 27 | class SkCommandLineConfig { |
| 28 | public: |
| 29 | SkCommandLineConfig(const SkString& tag, |
| 30 | const SkString& backend, |
Herb Derby | d7a00839 | 2023-03-02 15:36:17 -0500 | [diff] [blame] | 31 | const skia_private::TArray<SkString>& viaParts); |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 32 | virtual ~SkCommandLineConfig(); |
| 33 | virtual const SkCommandLineConfigGpu* asConfigGpu() const { return nullptr; } |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 34 | virtual const SkCommandLineConfigGraphite* asConfigGraphite() const { return nullptr; } |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 35 | virtual const SkCommandLineConfigSvg* asConfigSvg() const { return nullptr; } |
| 36 | const SkString& getTag() const { return fTag; } |
| 37 | const SkString& getBackend() const { return fBackend; } |
Brian Osman | fcb5023 | 2021-08-12 10:51:48 -0400 | [diff] [blame] | 38 | sk_sp<SkColorSpace> refColorSpace() const { return fColorSpace; } |
Herb Derby | d7a00839 | 2023-03-02 15:36:17 -0500 | [diff] [blame] | 39 | const skia_private::TArray<SkString>& getViaParts() const { return fViaParts; } |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 40 | |
| 41 | private: |
Herb Derby | d7a00839 | 2023-03-02 15:36:17 -0500 | [diff] [blame] | 42 | SkString fTag; |
| 43 | SkString fBackend; |
| 44 | sk_sp<SkColorSpace> fColorSpace; |
| 45 | skia_private::TArray<SkString> fViaParts; |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 46 | }; |
| 47 | |
| 48 | // SkCommandLineConfigGpu is a SkCommandLineConfig that extracts information out of the backend |
| 49 | // part of the tag. It is constructed tags that have: |
| 50 | // * backends of form "gpu[option=value,option2=value,...]" |
| 51 | // * backends that represent a shorthand of above (such as "glmsaa16" representing |
| 52 | // "gpu(api=gl,samples=16)") |
| 53 | class SkCommandLineConfigGpu : public SkCommandLineConfig { |
| 54 | public: |
| 55 | enum class SurfType { kDefault, kBackendTexture, kBackendRenderTarget }; |
John Stiles | ba7c525 | 2023-08-25 10:50:10 -0400 | [diff] [blame] | 56 | typedef skgpu::ContextType ContextType; |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 57 | typedef sk_gpu_test::GrContextFactory::ContextOverrides ContextOverrides; |
| 58 | |
| 59 | SkCommandLineConfigGpu(const SkString& tag, |
Herb Derby | d7a00839 | 2023-03-02 15:36:17 -0500 | [diff] [blame] | 60 | const skia_private::TArray<SkString>& viaParts, |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 61 | ContextType contextType, |
Brian Salomon | b2b7f80 | 2020-08-26 15:27:03 -0400 | [diff] [blame] | 62 | bool fakeGLESVer2, |
Chris Dalton | 180b4a1 | 2021-03-16 20:49:15 -0600 | [diff] [blame] | 63 | uint32_t surfaceFlags, |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 64 | int samples, |
| 65 | SkColorType colorType, |
| 66 | SkAlphaType alphaType, |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 67 | bool useStencilBuffers, |
Brian Osman | f71b070 | 2019-04-03 13:04:16 -0400 | [diff] [blame] | 68 | int testPersistentCache, |
Brian Osman | ed58e00 | 2019-09-06 14:42:43 -0400 | [diff] [blame] | 69 | bool testPrecompile, |
Robert Phillips | 291f340 | 2020-02-19 14:14:47 -0500 | [diff] [blame] | 70 | bool useDDLSink, |
Herb Derby | 6b49c54 | 2022-03-23 09:24:02 -0400 | [diff] [blame] | 71 | bool slug, |
Herb Derby | d378c78 | 2022-11-29 14:03:16 -0500 | [diff] [blame] | 72 | bool serializedSlug, |
Herb Derby | 3724b59 | 2022-12-05 17:08:03 -0500 | [diff] [blame] | 73 | bool remoteSlug, |
Brian Salomon | 5a32828 | 2021-04-14 10:32:25 -0400 | [diff] [blame] | 74 | bool reducedShaders, |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 75 | SurfType); |
| 76 | |
| 77 | const SkCommandLineConfigGpu* asConfigGpu() const override { return this; } |
| 78 | ContextType getContextType() const { return fContextType; } |
| 79 | ContextOverrides getContextOverrides() const { return fContextOverrides; } |
Chris Dalton | 180b4a1 | 2021-03-16 20:49:15 -0600 | [diff] [blame] | 80 | uint32_t getSurfaceFlags() const { return fSurfaceFlags; } |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 81 | int getSamples() const { return fSamples; } |
| 82 | SkColorType getColorType() const { return fColorType; } |
| 83 | SkAlphaType getAlphaType() const { return fAlphaType; } |
Brian Osman | f71b070 | 2019-04-03 13:04:16 -0400 | [diff] [blame] | 84 | int getTestPersistentCache() const { return fTestPersistentCache; } |
Brian Osman | ed58e00 | 2019-09-06 14:42:43 -0400 | [diff] [blame] | 85 | bool getTestPrecompile() const { return fTestPrecompile; } |
Robert Phillips | 291f340 | 2020-02-19 14:14:47 -0500 | [diff] [blame] | 86 | bool getUseDDLSink() const { return fUseDDLSink; } |
Herb Derby | 6b49c54 | 2022-03-23 09:24:02 -0400 | [diff] [blame] | 87 | bool getSlug() const { return fSlug; } |
Herb Derby | d378c78 | 2022-11-29 14:03:16 -0500 | [diff] [blame] | 88 | bool getSerializedSlug() const { return fSerializeSlug; } |
Herb Derby | 3724b59 | 2022-12-05 17:08:03 -0500 | [diff] [blame] | 89 | bool getRemoteSlug() const { return fRemoteSlug; } |
Brian Salomon | 91216d5 | 2021-04-09 11:57:59 -0400 | [diff] [blame] | 90 | bool getReducedShaders() const { return fReducedShaders; } |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 91 | SurfType getSurfType() const { return fSurfType; } |
| 92 | |
| 93 | private: |
| 94 | ContextType fContextType; |
| 95 | ContextOverrides fContextOverrides; |
Chris Dalton | 180b4a1 | 2021-03-16 20:49:15 -0600 | [diff] [blame] | 96 | uint32_t fSurfaceFlags; |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 97 | int fSamples; |
| 98 | SkColorType fColorType; |
| 99 | SkAlphaType fAlphaType; |
Brian Osman | f71b070 | 2019-04-03 13:04:16 -0400 | [diff] [blame] | 100 | int fTestPersistentCache; |
Brian Osman | ed58e00 | 2019-09-06 14:42:43 -0400 | [diff] [blame] | 101 | bool fTestPrecompile; |
Robert Phillips | 291f340 | 2020-02-19 14:14:47 -0500 | [diff] [blame] | 102 | bool fUseDDLSink; |
Herb Derby | 6b49c54 | 2022-03-23 09:24:02 -0400 | [diff] [blame] | 103 | bool fSlug; |
Herb Derby | d378c78 | 2022-11-29 14:03:16 -0500 | [diff] [blame] | 104 | bool fSerializeSlug; |
Herb Derby | 3724b59 | 2022-12-05 17:08:03 -0500 | [diff] [blame] | 105 | bool fRemoteSlug; |
Brian Salomon | 91216d5 | 2021-04-09 11:57:59 -0400 | [diff] [blame] | 106 | bool fReducedShaders; |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 107 | SurfType fSurfType; |
| 108 | }; |
| 109 | |
Kevin Lubick | 0f7b44e | 2023-02-28 09:13:11 -0500 | [diff] [blame] | 110 | #if defined(SK_GRAPHITE) |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 111 | |
| 112 | #include "tools/graphite/ContextFactory.h" |
| 113 | |
| 114 | class SkCommandLineConfigGraphite : public SkCommandLineConfig { |
| 115 | public: |
John Stiles | ba7c525 | 2023-08-25 10:50:10 -0400 | [diff] [blame] | 116 | using ContextType = skgpu::ContextType; |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 117 | |
Brian Salomon | 0d5356a | 2023-12-14 11:39:05 -0500 | [diff] [blame] | 118 | enum class SurfaceType { |
| 119 | // SkSurfaces::RenderTarget() |
| 120 | kDefault, |
| 121 | // BackendTexture around a WGPUTextureView passed to SkSurfaces::WrapBackendTexture() |
| 122 | kWrapTextureView, |
| 123 | }; |
| 124 | |
John Stiles | da3bb89 | 2023-08-21 11:31:03 -0400 | [diff] [blame] | 125 | SkCommandLineConfigGraphite(const SkString& tag, |
Herb Derby | d7a00839 | 2023-03-02 15:36:17 -0500 | [diff] [blame] | 126 | const skia_private::TArray<SkString>& viaParts, |
John Stiles | da3bb89 | 2023-08-21 11:31:03 -0400 | [diff] [blame] | 127 | ContextType contextType, |
Brian Salomon | 0d5356a | 2023-12-14 11:39:05 -0500 | [diff] [blame] | 128 | SurfaceType surfaceType, |
Brian Salomon | 23e1cb2 | 2023-12-05 19:46:43 -0500 | [diff] [blame] | 129 | const skiatest::graphite::TestOptions& options, |
John Stiles | da3bb89 | 2023-08-21 11:31:03 -0400 | [diff] [blame] | 130 | SkColorType colorType, |
Robert Phillips | 34ca4a4 | 2024-02-05 13:35:56 -0500 | [diff] [blame] | 131 | SkAlphaType alphaType, |
| 132 | bool testPrecompile) |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 133 | : SkCommandLineConfig(tag, SkString("graphite"), viaParts) |
Brian Salomon | 23e1cb2 | 2023-12-05 19:46:43 -0500 | [diff] [blame] | 134 | , fOptions(options) |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 135 | , fContextType(contextType) |
Brian Salomon | 0d5356a | 2023-12-14 11:39:05 -0500 | [diff] [blame] | 136 | , fSurfaceType(surfaceType) |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 137 | , fColorType(colorType) |
Robert Phillips | 34ca4a4 | 2024-02-05 13:35:56 -0500 | [diff] [blame] | 138 | , fAlphaType(alphaType) |
| 139 | , fTestPrecompile(testPrecompile) { |
| 140 | } |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 141 | const SkCommandLineConfigGraphite* asConfigGraphite() const override { return this; } |
| 142 | |
Brian Salomon | 23e1cb2 | 2023-12-05 19:46:43 -0500 | [diff] [blame] | 143 | const skiatest::graphite::TestOptions& getOptions() const { return fOptions; } |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 144 | ContextType getContextType() const { return fContextType; } |
Brian Salomon | 0d5356a | 2023-12-14 11:39:05 -0500 | [diff] [blame] | 145 | SurfaceType getSurfaceType() const { return fSurfaceType; } |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 146 | SkColorType getColorType() const { return fColorType; } |
| 147 | SkAlphaType getAlphaType() const { return fAlphaType; } |
Robert Phillips | 34ca4a4 | 2024-02-05 13:35:56 -0500 | [diff] [blame] | 148 | bool getTestPrecompile() const { return fTestPrecompile; } |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 149 | |
| 150 | private: |
Brian Salomon | 23e1cb2 | 2023-12-05 19:46:43 -0500 | [diff] [blame] | 151 | skiatest::graphite::TestOptions fOptions; |
Brian Salomon | c759bbf | 2023-12-05 11:11:27 -0500 | [diff] [blame] | 152 | ContextType fContextType; |
Brian Salomon | 0d5356a | 2023-12-14 11:39:05 -0500 | [diff] [blame] | 153 | SurfaceType fSurfaceType; |
Brian Salomon | c759bbf | 2023-12-05 11:11:27 -0500 | [diff] [blame] | 154 | SkColorType fColorType; |
| 155 | SkAlphaType fAlphaType; |
Robert Phillips | 34ca4a4 | 2024-02-05 13:35:56 -0500 | [diff] [blame] | 156 | bool fTestPrecompile; |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 157 | }; |
| 158 | |
Kevin Lubick | 0f7b44e | 2023-02-28 09:13:11 -0500 | [diff] [blame] | 159 | #endif // SK_GRAPHITE |
Robert Phillips | 297d096 | 2021-10-13 10:37:36 -0400 | [diff] [blame] | 160 | |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 161 | // SkCommandLineConfigSvg is a SkCommandLineConfig that extracts information out of the backend |
| 162 | // part of the tag. It is constructed tags that have: |
| 163 | // * backends of form "svg[option=value,option2=value,...]" |
| 164 | class SkCommandLineConfigSvg : public SkCommandLineConfig { |
| 165 | public: |
Herb Derby | d7a00839 | 2023-03-02 15:36:17 -0500 | [diff] [blame] | 166 | SkCommandLineConfigSvg(const SkString& tag, const skia_private::TArray<SkString>& viaParts, int pageIndex); |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 167 | const SkCommandLineConfigSvg* asConfigSvg() const override { return this; } |
| 168 | |
| 169 | int getPageIndex() const { return fPageIndex; } |
| 170 | |
| 171 | private: |
| 172 | int fPageIndex; |
| 173 | }; |
| 174 | |
Herb Derby | d7a00839 | 2023-03-02 15:36:17 -0500 | [diff] [blame] | 175 | typedef skia_private::TArray<std::unique_ptr<SkCommandLineConfig>, true> SkCommandLineConfigArray; |
Mike Klein | 88544fb | 2019-03-20 10:50:33 -0500 | [diff] [blame] | 176 | void ParseConfigs(const CommandLineFlags::StringArray& configList, |
| 177 | SkCommandLineConfigArray* outResult); |
| 178 | |
| 179 | #endif |