summaryrefslogtreecommitdiffstats
path: root/gfx/skia/skia/src/sksl/SkSLModuleLoader.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/skia/skia/src/sksl/SkSLModuleLoader.h')
-rw-r--r--gfx/skia/skia/src/sksl/SkSLModuleLoader.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/sksl/SkSLModuleLoader.h b/gfx/skia/skia/src/sksl/SkSLModuleLoader.h
new file mode 100644
index 0000000000..bb300e2f7a
--- /dev/null
+++ b/gfx/skia/skia/src/sksl/SkSLModuleLoader.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SKSL_MODULELOADER
+#define SKSL_MODULELOADER
+
+#include "src/sksl/SkSLBuiltinTypes.h"
+#include <memory>
+
+namespace SkSL {
+
+class Compiler;
+class ModifiersPool;
+struct Module;
+class Type;
+
+using BuiltinTypePtr = const std::unique_ptr<Type> BuiltinTypes::*;
+
+class ModuleLoader {
+private:
+ struct Impl;
+ Impl& fModuleLoader;
+
+public:
+ ModuleLoader(ModuleLoader::Impl&);
+ ~ModuleLoader();
+
+ // Acquires a mutex-locked reference to the singleton ModuleLoader. When the ModuleLoader is
+ // allowed to fall out of scope, the mutex will be released.
+ static ModuleLoader Get();
+
+ // The built-in types and root module are universal, immutable, and shared by every Compiler.
+ // They are created when the ModuleLoader is instantiated and never change.
+ const BuiltinTypes& builtinTypes();
+ const Module* rootModule();
+
+ // This ModifiersPool is shared by every built-in module.
+ ModifiersPool& coreModifiers();
+
+ // These modules are loaded on demand; once loaded, they are kept for the lifetime of the
+ // process.
+ const Module* loadSharedModule(SkSL::Compiler* compiler);
+ const Module* loadGPUModule(SkSL::Compiler* compiler);
+ const Module* loadVertexModule(SkSL::Compiler* compiler);
+ const Module* loadFragmentModule(SkSL::Compiler* compiler);
+ const Module* loadComputeModule(SkSL::Compiler* compiler);
+ const Module* loadGraphiteVertexModule(SkSL::Compiler* compiler);
+ const Module* loadGraphiteFragmentModule(SkSL::Compiler* compiler);
+
+ const Module* loadPublicModule(SkSL::Compiler* compiler);
+ const Module* loadPrivateRTShaderModule(SkSL::Compiler* compiler);
+
+ // This updates an existing Module's symbol table to match Runtime Effect rules. GLSL types like
+ // `vec4` are added; SkSL private types like `sampler2D` are replaced with an invalid type.
+ void addPublicTypeAliases(const SkSL::Module* module);
+
+ // This unloads every module. It's useful primarily for benchmarking purposes.
+ void unloadModules();
+};
+
+} // namespace SkSL
+
+#endif // SKSL_MODULELOADER