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 #include "include/core/SkTypes.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/SkSLGraphiteModules.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/SkSLModule.h" 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Worker #include <string> 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker // We include minified SkSL module code and pass it directly to the compiler. 15*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_ENABLE_OPTIMIZE_SIZE) || !defined(SK_DEBUG) 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_compute.minified.sksl" 17*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_frag.minified.sksl" 18*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_gpu.minified.sksl" 19*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_public.minified.sksl" 20*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_rt_shader.minified.sksl" 21*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_shared.minified.sksl" 22*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_vert.minified.sksl" 23*c8dee2aaSAndroid Build Coastguard Worker #else 24*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_compute.unoptimized.sksl" 25*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_frag.unoptimized.sksl" 26*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_gpu.unoptimized.sksl" 27*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_public.unoptimized.sksl" 28*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_rt_shader.unoptimized.sksl" 29*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_shared.unoptimized.sksl" 30*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/generated/sksl_vert.unoptimized.sksl" 31*c8dee2aaSAndroid Build Coastguard Worker #endif 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker // We don't load the graphite modules by default because we don't want to bloat the Ganesh-only 34*c8dee2aaSAndroid Build Coastguard Worker // build with Graphite's modules. These will be filled in during initialization of the 35*c8dee2aaSAndroid Build Coastguard Worker // Graphite backend. 36*c8dee2aaSAndroid Build Coastguard Worker static const char* sdata_sksl_graphite_frag = ""; 37*c8dee2aaSAndroid Build Coastguard Worker static const char* sdata_sksl_graphite_frag_es2 = ""; 38*c8dee2aaSAndroid Build Coastguard Worker static const char* sdata_sksl_graphite_vert = ""; 39*c8dee2aaSAndroid Build Coastguard Worker static const char* sdata_sksl_graphite_vert_es2 = ""; 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker namespace SkSL { 42*c8dee2aaSAndroid Build Coastguard Worker GetModuleData(ModuleType type,const char *)43*c8dee2aaSAndroid Build Coastguard Workerstd::string GetModuleData(ModuleType type, const char* /*filename*/) { 44*c8dee2aaSAndroid Build Coastguard Worker #define M(name) case ModuleType::name: return std::string(SKSL_MINIFIED_##name); 45*c8dee2aaSAndroid Build Coastguard Worker // Creating a std::string with a nullptr is UB 46*c8dee2aaSAndroid Build Coastguard Worker #define G(name) \ 47*c8dee2aaSAndroid Build Coastguard Worker case ModuleType::name: \ 48*c8dee2aaSAndroid Build Coastguard Worker if (sdata_##name) { \ 49*c8dee2aaSAndroid Build Coastguard Worker return std::string(sdata_##name); \ 50*c8dee2aaSAndroid Build Coastguard Worker } else { \ 51*c8dee2aaSAndroid Build Coastguard Worker return ""; \ 52*c8dee2aaSAndroid Build Coastguard Worker } 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker switch (type) { 55*c8dee2aaSAndroid Build Coastguard Worker M(sksl_shared) 56*c8dee2aaSAndroid Build Coastguard Worker M(sksl_compute) 57*c8dee2aaSAndroid Build Coastguard Worker M(sksl_frag) 58*c8dee2aaSAndroid Build Coastguard Worker M(sksl_gpu) 59*c8dee2aaSAndroid Build Coastguard Worker M(sksl_public) 60*c8dee2aaSAndroid Build Coastguard Worker M(sksl_rt_shader) 61*c8dee2aaSAndroid Build Coastguard Worker M(sksl_vert) 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker G(sksl_graphite_frag) 64*c8dee2aaSAndroid Build Coastguard Worker G(sksl_graphite_frag_es2) 65*c8dee2aaSAndroid Build Coastguard Worker G(sksl_graphite_vert) 66*c8dee2aaSAndroid Build Coastguard Worker G(sksl_graphite_vert_es2) 67*c8dee2aaSAndroid Build Coastguard Worker default: 68*c8dee2aaSAndroid Build Coastguard Worker SkUNREACHABLE; 69*c8dee2aaSAndroid Build Coastguard Worker } 70*c8dee2aaSAndroid Build Coastguard Worker #undef M 71*c8dee2aaSAndroid Build Coastguard Worker } 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker namespace Loader { SetGraphiteModuleData(const GraphiteModules & modules)74*c8dee2aaSAndroid Build Coastguard Workervoid SetGraphiteModuleData(const GraphiteModules& modules) { 75*c8dee2aaSAndroid Build Coastguard Worker SkASSERTF(sdata_sksl_graphite_frag[0] == '\0', "We should only initialize this once"); 76*c8dee2aaSAndroid Build Coastguard Worker sdata_sksl_graphite_frag = modules.fFragmentShader; 77*c8dee2aaSAndroid Build Coastguard Worker sdata_sksl_graphite_frag_es2 = modules.fFragmentShaderES2; 78*c8dee2aaSAndroid Build Coastguard Worker sdata_sksl_graphite_vert = modules.fVertexShader; 79*c8dee2aaSAndroid Build Coastguard Worker sdata_sksl_graphite_vert_es2 = modules.fVertexShaderES2; 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(sdata_sksl_graphite_frag[0] != '\0'); 82*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(sdata_sksl_graphite_vert[0] != '\0'); 83*c8dee2aaSAndroid Build Coastguard Worker // TODO(jamesgk, kjlubick) Add check when ES2 code is included 84*c8dee2aaSAndroid Build Coastguard Worker } 85*c8dee2aaSAndroid Build Coastguard Worker } // namespace Loader 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard Worker } // namespace SkSL 88