1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2024 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SKSL_MODULE 9*c8dee2aaSAndroid Build Coastguard Worker #define SKSL_MODULE 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/ir/SkSLProgramElement.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/ir/SkSLSymbolTable.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint> 15*c8dee2aaSAndroid Build Coastguard Worker #include <memory> 16*c8dee2aaSAndroid Build Coastguard Worker #include <string> 17*c8dee2aaSAndroid Build Coastguard Worker #include <vector> 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker namespace SkSL { 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker /** 22*c8dee2aaSAndroid Build Coastguard Worker * Documentation for modules in SkSL: http://go/modules-in-sksl 23*c8dee2aaSAndroid Build Coastguard Worker * https://docs.google.com/document/d/1P8LkkimNr-nPlxMimUsz3K_7qMM7-tZOxDCWZejPcWg/edit?usp=sharing 24*c8dee2aaSAndroid Build Coastguard Worker */ 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker // A list of modules used in SkSL. 27*c8dee2aaSAndroid Build Coastguard Worker // Using an X-Macro (https://en.wikipedia.org/wiki/X_Macro) to manage the list. 28*c8dee2aaSAndroid Build Coastguard Worker #define SKSL_MODULE_LIST(M) \ 29*c8dee2aaSAndroid Build Coastguard Worker M(sksl_shared) \ 30*c8dee2aaSAndroid Build Coastguard Worker M(sksl_compute) \ 31*c8dee2aaSAndroid Build Coastguard Worker M(sksl_frag) \ 32*c8dee2aaSAndroid Build Coastguard Worker M(sksl_gpu) \ 33*c8dee2aaSAndroid Build Coastguard Worker M(sksl_public) \ 34*c8dee2aaSAndroid Build Coastguard Worker M(sksl_rt_shader) \ 35*c8dee2aaSAndroid Build Coastguard Worker M(sksl_vert) \ 36*c8dee2aaSAndroid Build Coastguard Worker M(sksl_graphite_frag) \ 37*c8dee2aaSAndroid Build Coastguard Worker M(sksl_graphite_frag_es2) \ 38*c8dee2aaSAndroid Build Coastguard Worker M(sksl_graphite_vert) \ 39*c8dee2aaSAndroid Build Coastguard Worker M(sksl_graphite_vert_es2) 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker enum class ModuleType : int8_t { 42*c8dee2aaSAndroid Build Coastguard Worker // `program` code is not in a module at all. 43*c8dee2aaSAndroid Build Coastguard Worker program = 0, 44*c8dee2aaSAndroid Build Coastguard Worker // `unknown` code exists in a module outside of SKSL_MODULE_LIST. 45*c8dee2aaSAndroid Build Coastguard Worker unknown = 1, 46*c8dee2aaSAndroid Build Coastguard Worker #define M(type) type, 47*c8dee2aaSAndroid Build Coastguard Worker SKSL_MODULE_LIST(M) 48*c8dee2aaSAndroid Build Coastguard Worker #undef M 49*c8dee2aaSAndroid Build Coastguard Worker }; 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker struct Module { 52*c8dee2aaSAndroid Build Coastguard Worker const Module* fParent = nullptr; 53*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<SymbolTable> fSymbols; 54*c8dee2aaSAndroid Build Coastguard Worker std::vector<std::unique_ptr<ProgramElement>> fElements; 55*c8dee2aaSAndroid Build Coastguard Worker ModuleType fModuleType = ModuleType::unknown; 56*c8dee2aaSAndroid Build Coastguard Worker }; 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker // Given a ModuleType, returns its name. 59*c8dee2aaSAndroid Build Coastguard Worker const char* ModuleTypeToString(ModuleType type); 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker std::string GetModuleData(ModuleType type, const char* filename); 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker } // namespace SkSL 64*c8dee2aaSAndroid Build Coastguard Worker 65*c8dee2aaSAndroid Build Coastguard Worker #endif // SKSL_MODULE 66