xref: /aosp_15_r20/external/skia/src/sksl/SkSLModuleDataDefault.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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 Worker std::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 Worker void 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