summaryrefslogtreecommitdiffstats
path: root/gfx/skia/skia/src/sksl/SkSLIntrinsicList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/skia/skia/src/sksl/SkSLIntrinsicList.cpp')
-rw-r--r--gfx/skia/skia/src/sksl/SkSLIntrinsicList.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/sksl/SkSLIntrinsicList.cpp b/gfx/skia/skia/src/sksl/SkSLIntrinsicList.cpp
new file mode 100644
index 0000000000..a582bdff60
--- /dev/null
+++ b/gfx/skia/skia/src/sksl/SkSLIntrinsicList.cpp
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2021 Google LLC.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "src/base/SkStringView.h"
+#include "src/sksl/SkSLIntrinsicList.h"
+
+namespace SkSL {
+
+const IntrinsicMap& GetIntrinsicMap() {
+ #define SKSL_INTRINSIC(name) {#name, k_##name##_IntrinsicKind},
+ static const auto* kAllIntrinsics = new SkTHashMap<std::string_view, IntrinsicKind>{
+ SKSL_INTRINSIC_LIST
+ };
+ #undef SKSL_INTRINSIC
+
+ return *kAllIntrinsics;
+}
+
+IntrinsicKind FindIntrinsicKind(std::string_view functionName) {
+ if (skstd::starts_with(functionName, '$')) {
+ functionName.remove_prefix(1);
+ }
+
+ const IntrinsicMap& intrinsicMap = GetIntrinsicMap();
+ IntrinsicKind* kind = intrinsicMap.find(functionName);
+ return kind ? *kind : kNotIntrinsic;
+}
+
+} // namespace SkSL