csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 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_PATH_RENDERER_H |
| 9 | #define SK_COMMON_FLAGS_PATH_RENDERER_H |
| 10 | |
| 11 | #if SK_SUPPORT_GPU |
| 12 | |
Brian Osman | 195c05b | 2017-08-30 15:14:04 -0400 | [diff] [blame^] | 13 | #include "GrTypesPriv.h" |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 14 | #include "SkCommandLineFlags.h" |
| 15 | #include "SkTypes.h" |
| 16 | |
| 17 | DECLARE_string(pr); |
| 18 | |
Brian Salomon | 42c456f | 2017-03-06 11:29:48 -0500 | [diff] [blame] | 19 | #define DEFINE_pathrenderer_flag \ |
Brian Osman | 8b0f265 | 2017-08-29 15:18:34 -0400 | [diff] [blame] | 20 | DEFINE_string(pr, "default", \ |
Brian Salomon | 42c456f | 2017-03-06 11:29:48 -0500 | [diff] [blame] | 21 | "Set of enabled gpu path renderers. Defined as a list of: " \ |
Brian Osman | c0e6627 | 2017-08-30 14:41:12 -0400 | [diff] [blame] | 22 | "[[~]all [~]default [~]dashline [~]nvpr [~]msaa [~]aaconvex " \ |
Brian Osman | 8b0f265 | 2017-08-29 15:18:34 -0400 | [diff] [blame] | 23 | "[~]aalinearizing [~]small [~]tess]") |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 24 | |
Brian Osman | 195c05b | 2017-08-30 15:14:04 -0400 | [diff] [blame^] | 25 | inline GpuPathRenderers get_named_pathrenderers_flags(const char* name) { |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 26 | if (!strcmp(name, "all")) { |
| 27 | return GpuPathRenderers::kAll; |
Brian Osman | 8b0f265 | 2017-08-29 15:18:34 -0400 | [diff] [blame] | 28 | } else if (!strcmp(name, "default")) { |
| 29 | return GpuPathRenderers::kDefault; |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 30 | } 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; |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 36 | } else if (!strcmp(name, "aaconvex")) { |
| 37 | return GpuPathRenderers::kAAConvex; |
| 38 | } else if (!strcmp(name, "aalinearizing")) { |
| 39 | return GpuPathRenderers::kAALinearizing; |
Jim Van Verth | 8301046 | 2017-03-16 08:45:39 -0400 | [diff] [blame] | 40 | } else if (!strcmp(name, "small")) { |
| 41 | return GpuPathRenderers::kSmall; |
Chris Dalton | 1a325d2 | 2017-07-14 15:17:41 -0600 | [diff] [blame] | 42 | } else if (!strcmp(name, "ccpr")) { |
| 43 | return GpuPathRenderers::kCoverageCounting; |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 44 | } else if (!strcmp(name, "tess")) { |
Brian Osman | 8a9de3d | 2017-03-01 14:59:05 -0500 | [diff] [blame] | 45 | return GpuPathRenderers::kTessellating; |
Brian Osman | 5929f5c | 2017-08-22 09:47:50 -0400 | [diff] [blame] | 46 | } else if (!strcmp(name, "none")) { |
| 47 | return GpuPathRenderers::kNone; |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 48 | } |
| 49 | SK_ABORT(SkStringPrintf("error: unknown named path renderer \"%s\"\n", name).c_str()); |
| 50 | return GpuPathRenderers::kNone; |
| 51 | } |
| 52 | |
Brian Osman | 195c05b | 2017-08-30 15:14:04 -0400 | [diff] [blame^] | 53 | inline GpuPathRenderers CollectGpuPathRenderersFromFlags() { |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 54 | if (FLAGS_pr.isEmpty()) { |
Brian Osman | 8b0f265 | 2017-08-29 15:18:34 -0400 | [diff] [blame] | 55 | return GpuPathRenderers::kDefault; |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 56 | } |
| 57 | GpuPathRenderers gpuPathRenderers = '~' == FLAGS_pr[0][0] ? |
Brian Osman | 8b0f265 | 2017-08-29 15:18:34 -0400 | [diff] [blame] | 58 | GpuPathRenderers::kDefault : GpuPathRenderers::kNone; |
csmartdalton | 008b9d8 | 2017-02-22 12:00:42 -0700 | [diff] [blame] | 59 | 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 |