blob: 1e8b2d25c6883d1150fb98dc1f553c67a42f0b46 [file] [log] [blame]
csmartdalton008b9d82017-02-22 12:00:42 -07001/*
2 * Copyright 2017 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
Chris Dalton040238b2017-12-18 14:22:34 -07008#ifndef SK_COMMON_FLAGS_GPU_H
9#define SK_COMMON_FLAGS_GPU_H
csmartdalton008b9d82017-02-22 12:00:42 -070010
Brian Osman195c05b2017-08-30 15:14:04 -040011#include "GrTypesPriv.h"
csmartdalton008b9d82017-02-22 12:00:42 -070012#include "SkCommandLineFlags.h"
13#include "SkTypes.h"
14
Chris Dalton040238b2017-12-18 14:22:34 -070015DECLARE_int32(gpuThreads);
16DECLARE_bool(cachePathMasks);
17DECLARE_bool(noGS);
csmartdalton008b9d82017-02-22 12:00:42 -070018DECLARE_string(pr);
Robert Phillipscb2275b2018-08-07 08:34:38 -040019DECLARE_bool(disableExplicitAlloc);
csmartdalton008b9d82017-02-22 12:00:42 -070020
Brian Osman195c05b2017-08-30 15:14:04 -040021inline GpuPathRenderers get_named_pathrenderers_flags(const char* name) {
Chris Dalton9acfc6c2018-07-26 12:34:49 -060022 if (!strcmp(name, "none")) {
23 return GpuPathRenderers::kNone;
csmartdalton008b9d82017-02-22 12:00:42 -070024 } else if (!strcmp(name, "dashline")) {
25 return GpuPathRenderers::kDashLine;
26 } else if (!strcmp(name, "nvpr")) {
27 return GpuPathRenderers::kStencilAndCover;
Chris Dalton9acfc6c2018-07-26 12:34:49 -060028 } else if (!strcmp(name, "ccpr")) {
29 return GpuPathRenderers::kCoverageCounting;
30 } else if (!strcmp(name, "aahairline")) {
31 return GpuPathRenderers::kAAHairline;
csmartdalton008b9d82017-02-22 12:00:42 -070032 } else if (!strcmp(name, "aaconvex")) {
33 return GpuPathRenderers::kAAConvex;
34 } else if (!strcmp(name, "aalinearizing")) {
35 return GpuPathRenderers::kAALinearizing;
Jim Van Verth83010462017-03-16 08:45:39 -040036 } else if (!strcmp(name, "small")) {
37 return GpuPathRenderers::kSmall;
csmartdalton008b9d82017-02-22 12:00:42 -070038 } else if (!strcmp(name, "tess")) {
Brian Osman8a9de3d2017-03-01 14:59:05 -050039 return GpuPathRenderers::kTessellating;
Chris Dalton9acfc6c2018-07-26 12:34:49 -060040 } else if (!strcmp(name, "all")) {
41 return GpuPathRenderers::kAll;
csmartdalton008b9d82017-02-22 12:00:42 -070042 }
43 SK_ABORT(SkStringPrintf("error: unknown named path renderer \"%s\"\n", name).c_str());
44 return GpuPathRenderers::kNone;
45}
46
Brian Osman195c05b2017-08-30 15:14:04 -040047inline GpuPathRenderers CollectGpuPathRenderersFromFlags() {
csmartdalton008b9d82017-02-22 12:00:42 -070048 if (FLAGS_pr.isEmpty()) {
Chris Dalton9acfc6c2018-07-26 12:34:49 -060049 return GpuPathRenderers::kAll;
csmartdalton008b9d82017-02-22 12:00:42 -070050 }
Chris Dalton9acfc6c2018-07-26 12:34:49 -060051 GpuPathRenderers gpuPathRenderers = '~' == FLAGS_pr[0][0]
52 ? GpuPathRenderers::kAll : GpuPathRenderers::kNone;
csmartdalton008b9d82017-02-22 12:00:42 -070053 for (int i = 0; i < FLAGS_pr.count(); ++i) {
54 const char* name = FLAGS_pr[i];
55 if (name[0] == '~') {
56 gpuPathRenderers &= ~get_named_pathrenderers_flags(&name[1]);
57 } else {
58 gpuPathRenderers |= get_named_pathrenderers_flags(name);
59 }
60 }
61 return gpuPathRenderers;
62}
63
Chris Dalton040238b2017-12-18 14:22:34 -070064/**
65 * Helper to set GrContextOptions from common GPU flags.
66 */
67void SetCtxOptionsFromCommonFlags(struct GrContextOptions*);
68
csmartdalton008b9d82017-02-22 12:00:42 -070069#endif