blob: 02b5d1798c2c31954a23a6cd0cc31735925fdd94 [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
8#ifndef SK_COMMON_FLAGS_PATH_RENDERER_H
9#define SK_COMMON_FLAGS_PATH_RENDERER_H
10
11#if SK_SUPPORT_GPU
12
Brian Osman195c05b2017-08-30 15:14:04 -040013#include "GrTypesPriv.h"
csmartdalton008b9d82017-02-22 12:00:42 -070014#include "SkCommandLineFlags.h"
15#include "SkTypes.h"
16
17DECLARE_string(pr);
18
Brian Salomon42c456f2017-03-06 11:29:48 -050019#define DEFINE_pathrenderer_flag \
Brian Osman8b0f2652017-08-29 15:18:34 -040020 DEFINE_string(pr, "default", \
Brian Salomon42c456f2017-03-06 11:29:48 -050021 "Set of enabled gpu path renderers. Defined as a list of: " \
Brian Osmanc0e66272017-08-30 14:41:12 -040022 "[[~]all [~]default [~]dashline [~]nvpr [~]msaa [~]aaconvex " \
Brian Osman8b0f2652017-08-29 15:18:34 -040023 "[~]aalinearizing [~]small [~]tess]")
csmartdalton008b9d82017-02-22 12:00:42 -070024
Brian Osman195c05b2017-08-30 15:14:04 -040025inline GpuPathRenderers get_named_pathrenderers_flags(const char* name) {
csmartdalton008b9d82017-02-22 12:00:42 -070026 if (!strcmp(name, "all")) {
27 return GpuPathRenderers::kAll;
Brian Osman8b0f2652017-08-29 15:18:34 -040028 } else if (!strcmp(name, "default")) {
29 return GpuPathRenderers::kDefault;
csmartdalton008b9d82017-02-22 12:00:42 -070030 } else if (!strcmp(name, "dashline")) {
31 return GpuPathRenderers::kDashLine;
32 } else if (!strcmp(name, "nvpr")) {
33 return GpuPathRenderers::kStencilAndCover;
34 } else if (!strcmp(name, "msaa")) {
35 return GpuPathRenderers::kMSAA;
csmartdalton008b9d82017-02-22 12:00:42 -070036 } else if (!strcmp(name, "aaconvex")) {
37 return GpuPathRenderers::kAAConvex;
38 } else if (!strcmp(name, "aalinearizing")) {
39 return GpuPathRenderers::kAALinearizing;
Jim Van Verth83010462017-03-16 08:45:39 -040040 } else if (!strcmp(name, "small")) {
41 return GpuPathRenderers::kSmall;
Chris Dalton1a325d22017-07-14 15:17:41 -060042 } else if (!strcmp(name, "ccpr")) {
43 return GpuPathRenderers::kCoverageCounting;
csmartdalton008b9d82017-02-22 12:00:42 -070044 } else if (!strcmp(name, "tess")) {
Brian Osman8a9de3d2017-03-01 14:59:05 -050045 return GpuPathRenderers::kTessellating;
Brian Osman5929f5c2017-08-22 09:47:50 -040046 } else if (!strcmp(name, "none")) {
47 return GpuPathRenderers::kNone;
csmartdalton008b9d82017-02-22 12:00:42 -070048 }
49 SK_ABORT(SkStringPrintf("error: unknown named path renderer \"%s\"\n", name).c_str());
50 return GpuPathRenderers::kNone;
51}
52
Brian Osman195c05b2017-08-30 15:14:04 -040053inline GpuPathRenderers CollectGpuPathRenderersFromFlags() {
csmartdalton008b9d82017-02-22 12:00:42 -070054 if (FLAGS_pr.isEmpty()) {
Brian Osman8b0f2652017-08-29 15:18:34 -040055 return GpuPathRenderers::kDefault;
csmartdalton008b9d82017-02-22 12:00:42 -070056 }
57 GpuPathRenderers gpuPathRenderers = '~' == FLAGS_pr[0][0] ?
Brian Osman8b0f2652017-08-29 15:18:34 -040058 GpuPathRenderers::kDefault : GpuPathRenderers::kNone;
csmartdalton008b9d82017-02-22 12:00:42 -070059 for (int i = 0; i < FLAGS_pr.count(); ++i) {
60 const char* name = FLAGS_pr[i];
61 if (name[0] == '~') {
62 gpuPathRenderers &= ~get_named_pathrenderers_flags(&name[1]);
63 } else {
64 gpuPathRenderers |= get_named_pathrenderers_flags(name);
65 }
66 }
67 return gpuPathRenderers;
68}
69
70#endif // SK_SUPPORT_GPU
71
72#endif