1/*
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_GPU_H
9#define SK_COMMON_FLAGS_GPU_H
10
11#if SK_SUPPORT_GPU
12
13#include "GrTypesPriv.h"
14#include "SkCommandLineFlags.h"
15#include "SkTypes.h"
16
17DECLARE_int32(gpuThreads);
18DECLARE_bool(cachePathMasks);
19DECLARE_bool(noGS);
20DECLARE_string(pr);
21
22inline GpuPathRenderers get_named_pathrenderers_flags(const char* name) {
23    if (!strcmp(name, "all")) {
24        return GpuPathRenderers::kAll;
25    } else if (!strcmp(name, "default")) {
26        return GpuPathRenderers::kDefault;
27    } else if (!strcmp(name, "dashline")) {
28        return GpuPathRenderers::kDashLine;
29    } else if (!strcmp(name, "nvpr")) {
30        return GpuPathRenderers::kStencilAndCover;
31    } else if (!strcmp(name, "msaa")) {
32        return GpuPathRenderers::kMSAA;
33    } else if (!strcmp(name, "aaconvex")) {
34        return GpuPathRenderers::kAAConvex;
35    } else if (!strcmp(name, "aalinearizing")) {
36        return GpuPathRenderers::kAALinearizing;
37    } else if (!strcmp(name, "small")) {
38        return GpuPathRenderers::kSmall;
39    } else if (!strcmp(name, "ccpr")) {
40        return GpuPathRenderers::kCoverageCounting;
41    } else if (!strcmp(name, "tess")) {
42        return GpuPathRenderers::kTessellating;
43    } else if (!strcmp(name, "none")) {
44        return GpuPathRenderers::kNone;
45    }
46    SK_ABORT(SkStringPrintf("error: unknown named path renderer \"%s\"\n", name).c_str());
47    return GpuPathRenderers::kNone;
48}
49
50inline GpuPathRenderers CollectGpuPathRenderersFromFlags() {
51    if (FLAGS_pr.isEmpty()) {
52        return GpuPathRenderers::kDefault;
53    }
54    GpuPathRenderers gpuPathRenderers = '~' == FLAGS_pr[0][0] ?
55                                        GpuPathRenderers::kDefault : GpuPathRenderers::kNone;
56    for (int i = 0; i < FLAGS_pr.count(); ++i) {
57        const char* name = FLAGS_pr[i];
58        if (name[0] == '~') {
59            gpuPathRenderers &= ~get_named_pathrenderers_flags(&name[1]);
60        } else {
61            gpuPathRenderers |= get_named_pathrenderers_flags(name);
62        }
63    }
64    return gpuPathRenderers;
65}
66
67/**
68 *  Helper to set GrContextOptions from common GPU flags.
69 */
70void SetCtxOptionsFromCommonFlags(struct GrContextOptions*);
71
72#endif // SK_SUPPORT_GPU
73
74#endif
75