xref: /aosp_15_r20/external/skia/tools/flags/CommonFlagsGanesh.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2014 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 #include "include/core/SkExecutor.h"
9*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrContextOptions.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "tools/flags/CommonFlagsGanesh.h"
11*c8dee2aaSAndroid Build Coastguard Worker 
12*c8dee2aaSAndroid Build Coastguard Worker DEFINE_int(gpuThreads,
13*c8dee2aaSAndroid Build Coastguard Worker              2,
14*c8dee2aaSAndroid Build Coastguard Worker              "Create this many extra threads to assist with GPU work, "
15*c8dee2aaSAndroid Build Coastguard Worker              "including software path rendering. Defaults to two.");
16*c8dee2aaSAndroid Build Coastguard Worker 
17*c8dee2aaSAndroid Build Coastguard Worker namespace CommonFlags {
18*c8dee2aaSAndroid Build Coastguard Worker 
19*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_bool(cachePathMasks, true,
20*c8dee2aaSAndroid Build Coastguard Worker                    "Allows path mask textures to be cached in GPU configs.");
21*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_bool(failFlushTimeCallbacks, false,
22*c8dee2aaSAndroid Build Coastguard Worker                    "Causes all flush-time callbacks to fail.");
23*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_bool(allPathsVolatile, false,
24*c8dee2aaSAndroid Build Coastguard Worker                    "Causes all GPU paths to be processed as if 'setIsVolatile' had been called.");
25*c8dee2aaSAndroid Build Coastguard Worker 
26*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_string(pr, "",
27*c8dee2aaSAndroid Build Coastguard Worker               "Set of enabled gpu path renderers. Defined as a list of: "
28*c8dee2aaSAndroid Build Coastguard Worker               "[~]none [~]dashline [~]aahairline [~]aaconvex [~]aalinearizing [~]small [~]tri "
29*c8dee2aaSAndroid Build Coastguard Worker               "[~]atlas [~]tess [~]all");
30*c8dee2aaSAndroid Build Coastguard Worker 
31*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_int(internalSamples, -1,
32*c8dee2aaSAndroid Build Coastguard Worker         "Number of samples for internal draws that use MSAA, or default value if negative.");
33*c8dee2aaSAndroid Build Coastguard Worker 
34*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_int(maxAtlasSize, -1,
35*c8dee2aaSAndroid Build Coastguard Worker         "Maximum width and height of internal texture atlases, or default value if negative.");
36*c8dee2aaSAndroid Build Coastguard Worker 
37*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_bool(disableDriverCorrectnessWorkarounds, false,
38*c8dee2aaSAndroid Build Coastguard Worker                    "Disables all GPU driver correctness workarounds");
39*c8dee2aaSAndroid Build Coastguard Worker 
40*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_bool(dontReduceOpsTaskSplitting, false,
41*c8dee2aaSAndroid Build Coastguard Worker                    "Don't reorder tasks to reduce render passes");
42*c8dee2aaSAndroid Build Coastguard Worker 
43*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_int(gpuResourceCacheLimit, -1,
44*c8dee2aaSAndroid Build Coastguard Worker                   "Maximum number of bytes to use for budgeted GPU resources. "
45*c8dee2aaSAndroid Build Coastguard Worker                   "Default is -1, which means GrResourceCache::kDefaultMaxSize.");
46*c8dee2aaSAndroid Build Coastguard Worker 
47*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_bool(allowMSAAOnNewIntel, false,
48*c8dee2aaSAndroid Build Coastguard Worker                    "Allows MSAA to be enabled on newer intel GPUs.");
49*c8dee2aaSAndroid Build Coastguard Worker 
get_named_pathrenderers_flags(const char * name)50*c8dee2aaSAndroid Build Coastguard Worker static GpuPathRenderers get_named_pathrenderers_flags(const char* name) {
51*c8dee2aaSAndroid Build Coastguard Worker     if (!strcmp(name, "none")) {
52*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kNone;
53*c8dee2aaSAndroid Build Coastguard Worker     } else if (!strcmp(name, "dashline")) {
54*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kDashLine;
55*c8dee2aaSAndroid Build Coastguard Worker     } else if (!strcmp(name, "aahairline")) {
56*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kAAHairline;
57*c8dee2aaSAndroid Build Coastguard Worker     } else if (!strcmp(name, "aaconvex")) {
58*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kAAConvex;
59*c8dee2aaSAndroid Build Coastguard Worker     } else if (!strcmp(name, "aalinearizing")) {
60*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kAALinearizing;
61*c8dee2aaSAndroid Build Coastguard Worker     } else if (!strcmp(name, "small")) {
62*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kSmall;
63*c8dee2aaSAndroid Build Coastguard Worker     } else if (!strcmp(name, "tri")) {
64*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kTriangulating;
65*c8dee2aaSAndroid Build Coastguard Worker     } else if (!strcmp(name, "atlas")) {
66*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kAtlas;
67*c8dee2aaSAndroid Build Coastguard Worker     } else if (!strcmp(name, "tess")) {
68*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kTessellation;
69*c8dee2aaSAndroid Build Coastguard Worker     } else if (!strcmp(name, "default")) {
70*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kDefault;
71*c8dee2aaSAndroid Build Coastguard Worker     }
72*c8dee2aaSAndroid Build Coastguard Worker     SK_ABORT("error: unknown named path renderer \"%s\"\n", name);
73*c8dee2aaSAndroid Build Coastguard Worker }
74*c8dee2aaSAndroid Build Coastguard Worker 
collect_gpu_path_renderers_from_flags()75*c8dee2aaSAndroid Build Coastguard Worker static GpuPathRenderers collect_gpu_path_renderers_from_flags() {
76*c8dee2aaSAndroid Build Coastguard Worker     if (FLAGS_pr.isEmpty()) {
77*c8dee2aaSAndroid Build Coastguard Worker         return GpuPathRenderers::kDefault;
78*c8dee2aaSAndroid Build Coastguard Worker     }
79*c8dee2aaSAndroid Build Coastguard Worker 
80*c8dee2aaSAndroid Build Coastguard Worker     GpuPathRenderers gpuPathRenderers = ('~' == FLAGS_pr[0][0])
81*c8dee2aaSAndroid Build Coastguard Worker             ? GpuPathRenderers::kDefault
82*c8dee2aaSAndroid Build Coastguard Worker             : GpuPathRenderers::kNone;
83*c8dee2aaSAndroid Build Coastguard Worker 
84*c8dee2aaSAndroid Build Coastguard Worker     for (int i = 0; i < FLAGS_pr.size(); ++i) {
85*c8dee2aaSAndroid Build Coastguard Worker         const char* name = FLAGS_pr[i];
86*c8dee2aaSAndroid Build Coastguard Worker         if (name[0] == '~') {
87*c8dee2aaSAndroid Build Coastguard Worker             gpuPathRenderers &= ~get_named_pathrenderers_flags(&name[1]);
88*c8dee2aaSAndroid Build Coastguard Worker         } else {
89*c8dee2aaSAndroid Build Coastguard Worker             gpuPathRenderers |= get_named_pathrenderers_flags(name);
90*c8dee2aaSAndroid Build Coastguard Worker         }
91*c8dee2aaSAndroid Build Coastguard Worker     }
92*c8dee2aaSAndroid Build Coastguard Worker     return gpuPathRenderers;
93*c8dee2aaSAndroid Build Coastguard Worker }
94*c8dee2aaSAndroid Build Coastguard Worker 
SetCtxOptions(GrContextOptions * ctxOptions)95*c8dee2aaSAndroid Build Coastguard Worker void SetCtxOptions(GrContextOptions* ctxOptions) {
96*c8dee2aaSAndroid Build Coastguard Worker     static std::unique_ptr<SkExecutor> gGpuExecutor = (0 != FLAGS_gpuThreads)
97*c8dee2aaSAndroid Build Coastguard Worker         ? SkExecutor::MakeFIFOThreadPool(FLAGS_gpuThreads)
98*c8dee2aaSAndroid Build Coastguard Worker         : nullptr;
99*c8dee2aaSAndroid Build Coastguard Worker 
100*c8dee2aaSAndroid Build Coastguard Worker     ctxOptions->fExecutor                            = gGpuExecutor.get();
101*c8dee2aaSAndroid Build Coastguard Worker     ctxOptions->fAllowPathMaskCaching                = FLAGS_cachePathMasks;
102*c8dee2aaSAndroid Build Coastguard Worker     ctxOptions->fFailFlushTimeCallbacks              = FLAGS_failFlushTimeCallbacks;
103*c8dee2aaSAndroid Build Coastguard Worker     ctxOptions->fAllPathsVolatile                    = FLAGS_allPathsVolatile;
104*c8dee2aaSAndroid Build Coastguard Worker     ctxOptions->fGpuPathRenderers                    = collect_gpu_path_renderers_from_flags();
105*c8dee2aaSAndroid Build Coastguard Worker     ctxOptions->fDisableDriverCorrectnessWorkarounds = FLAGS_disableDriverCorrectnessWorkarounds;
106*c8dee2aaSAndroid Build Coastguard Worker     ctxOptions->fResourceCacheLimitOverride          = FLAGS_gpuResourceCacheLimit;
107*c8dee2aaSAndroid Build Coastguard Worker 
108*c8dee2aaSAndroid Build Coastguard Worker     if (FLAGS_internalSamples >= 0) {
109*c8dee2aaSAndroid Build Coastguard Worker         ctxOptions->fInternalMultisampleCount = FLAGS_internalSamples;
110*c8dee2aaSAndroid Build Coastguard Worker     }
111*c8dee2aaSAndroid Build Coastguard Worker     if (FLAGS_maxAtlasSize >= 0) {
112*c8dee2aaSAndroid Build Coastguard Worker         ctxOptions->fMaxTextureAtlasSize = FLAGS_maxAtlasSize;
113*c8dee2aaSAndroid Build Coastguard Worker     }
114*c8dee2aaSAndroid Build Coastguard Worker 
115*c8dee2aaSAndroid Build Coastguard Worker     if (FLAGS_dontReduceOpsTaskSplitting) {
116*c8dee2aaSAndroid Build Coastguard Worker         ctxOptions->fReduceOpsTaskSplitting = GrContextOptions::Enable::kNo;
117*c8dee2aaSAndroid Build Coastguard Worker     } else {
118*c8dee2aaSAndroid Build Coastguard Worker         ctxOptions->fReduceOpsTaskSplitting = GrContextOptions::Enable::kYes;
119*c8dee2aaSAndroid Build Coastguard Worker     }
120*c8dee2aaSAndroid Build Coastguard Worker     ctxOptions->fAllowMSAAOnNewIntel = FLAGS_allowMSAAOnNewIntel;
121*c8dee2aaSAndroid Build Coastguard Worker }
122*c8dee2aaSAndroid Build Coastguard Worker 
123*c8dee2aaSAndroid Build Coastguard Worker }  // namespace CommonFlags
124