6161#include " src/sksl/generated/sksl_gpu.dehydrated.sksl"
6262#include " src/sksl/generated/sksl_interp.dehydrated.sksl"
6363#include " src/sksl/generated/sksl_pipeline.dehydrated.sksl"
64- #include " src/sksl/generated/sksl_public.dehydrated.sksl"
6564#include " src/sksl/generated/sksl_vert.dehydrated.sksl"
6665
6766#define MODULE_DATA (name ) MakeModuleData(SKSL_INCLUDE_sksl_##name,\
@@ -90,93 +89,142 @@ Compiler::Compiler(const ShaderCapsClass* caps, Flags flags)
9089, fContext (std::make_shared<Context>())
9190, fErrorCount (0 ) {
9291 fRootSymbolTable = std::make_shared<SymbolTable>(this , /* builtin=*/ true );
93- fPrivateSymbolTable = std::make_shared<SymbolTable>(fRootSymbolTable , /* builtin=*/ true );
9492 fIRGenerator = std::make_unique<IRGenerator>(fContext .get (), &fInliner , *this );
95-
96- #define TYPE (t ) fContext ->f##t##_Type.get()
97-
98- const SkSL::Symbol* rootTypes[] = {
99- TYPE (Void),
100-
101- TYPE ( Float), TYPE ( Float2), TYPE ( Float3), TYPE ( Float4),
102- TYPE ( Half), TYPE ( Half2), TYPE ( Half3), TYPE ( Half4),
103- TYPE ( Int), TYPE ( Int2), TYPE ( Int3), TYPE ( Int4),
104- TYPE ( UInt), TYPE ( UInt2), TYPE ( UInt3), TYPE ( UInt4),
105- TYPE ( Short), TYPE ( Short2), TYPE ( Short3), TYPE ( Short4),
106- TYPE (UShort), TYPE (UShort2), TYPE (UShort3), TYPE (UShort4),
107- TYPE ( Byte), TYPE ( Byte2), TYPE ( Byte3), TYPE ( Byte4),
108- TYPE ( UByte), TYPE ( UByte2), TYPE ( UByte3), TYPE ( UByte4),
109- TYPE ( Bool), TYPE ( Bool2), TYPE ( Bool3), TYPE ( Bool4),
110-
111- TYPE (Float2x2), TYPE (Float2x3), TYPE (Float2x4),
112- TYPE (Float3x2), TYPE (Float3x3), TYPE (Float3x4),
113- TYPE (Float4x2), TYPE (Float4x3), TYPE (Float4x4),
114-
115- TYPE (Half2x2), TYPE (Half2x3), TYPE (Half2x4),
116- TYPE (Half3x2), TYPE (Half3x3), TYPE (Half3x4),
117- TYPE (Half4x2), TYPE (Half4x3), TYPE (Half4x4),
118-
119- TYPE (GenType), TYPE (GenHType), TYPE (GenIType), TYPE (GenUType), TYPE (GenBType),
120- TYPE (Mat), TYPE (Vec),
121- TYPE (GVec), TYPE (GVec2), TYPE (GVec3), TYPE (GVec4),
122- TYPE (HVec), TYPE (IVec), TYPE (UVec), TYPE (SVec), TYPE (USVec),
123- TYPE (ByteVec), TYPE (UByteVec), TYPE (BVec),
124-
125- TYPE (FragmentProcessor),
126- };
127-
128- const SkSL::Symbol* privateTypes[] = {
129- TYPE (Sampler1D), TYPE (Sampler2D), TYPE (Sampler3D),
130- TYPE (SamplerExternalOES),
131- TYPE (SamplerCube),
132- TYPE (Sampler2DRect),
133- TYPE (Sampler1DArray), TYPE (Sampler2DArray), TYPE (SamplerCubeArray),
134- TYPE (SamplerBuffer),
135- TYPE (Sampler2DMS), TYPE (Sampler2DMSArray),
136-
137- TYPE (ISampler2D),
138- TYPE (Image2D), TYPE (IImage2D),
139- TYPE (SubpassInput), TYPE (SubpassInputMS),
140-
141- TYPE (GSampler1D), TYPE (GSampler2D), TYPE (GSampler3D),
142- TYPE (GSamplerCube),
143- TYPE (GSampler2DRect),
144- TYPE (GSampler1DArray), TYPE (GSampler2DArray), TYPE (GSamplerCubeArray),
145- TYPE (GSamplerBuffer),
146- TYPE (GSampler2DMS), TYPE (GSampler2DMSArray),
147-
148- TYPE (Sampler1DShadow), TYPE (Sampler2DShadow), TYPE (SamplerCubeShadow),
149- TYPE (Sampler2DRectShadow),
150- TYPE (Sampler1DArrayShadow), TYPE (Sampler2DArrayShadow), TYPE (SamplerCubeArrayShadow),
151-
152- TYPE (GSampler2DArrayShadow), TYPE (GSamplerCubeArrayShadow),
153- TYPE (Sampler),
154- TYPE (Texture2D),
155- };
156-
157- for (const SkSL::Symbol* type : rootTypes) {
158- fRootSymbolTable ->addWithoutOwnership (type);
159- }
160- for (const SkSL::Symbol* type : privateTypes) {
161- fPrivateSymbolTable ->addWithoutOwnership (type);
162- }
163-
164- #undef TYPE
93+ #define ADD_TYPE (t ) fRootSymbolTable ->addWithoutOwnership (fContext ->f##t##_Type.get())
94+ ADD_TYPE(Void);
95+ ADD_TYPE (Float);
96+ ADD_TYPE (Float2);
97+ ADD_TYPE (Float3);
98+ ADD_TYPE (Float4);
99+ ADD_TYPE (Half);
100+ ADD_TYPE (Half2);
101+ ADD_TYPE (Half3);
102+ ADD_TYPE (Half4);
103+ ADD_TYPE (Int);
104+ ADD_TYPE (Int2);
105+ ADD_TYPE (Int3);
106+ ADD_TYPE (Int4);
107+ ADD_TYPE (UInt);
108+ ADD_TYPE (UInt2);
109+ ADD_TYPE (UInt3);
110+ ADD_TYPE (UInt4);
111+ ADD_TYPE (Short);
112+ ADD_TYPE (Short2);
113+ ADD_TYPE (Short3);
114+ ADD_TYPE (Short4);
115+ ADD_TYPE (UShort);
116+ ADD_TYPE (UShort2);
117+ ADD_TYPE (UShort3);
118+ ADD_TYPE (UShort4);
119+ ADD_TYPE (Byte);
120+ ADD_TYPE (Byte2);
121+ ADD_TYPE (Byte3);
122+ ADD_TYPE (Byte4);
123+ ADD_TYPE (UByte);
124+ ADD_TYPE (UByte2);
125+ ADD_TYPE (UByte3);
126+ ADD_TYPE (UByte4);
127+ ADD_TYPE (Bool);
128+ ADD_TYPE (Bool2);
129+ ADD_TYPE (Bool3);
130+ ADD_TYPE (Bool4);
131+ ADD_TYPE (Float2x2);
132+ ADD_TYPE (Float2x3);
133+ ADD_TYPE (Float2x4);
134+ ADD_TYPE (Float3x2);
135+ ADD_TYPE (Float3x3);
136+ ADD_TYPE (Float3x4);
137+ ADD_TYPE (Float4x2);
138+ ADD_TYPE (Float4x3);
139+ ADD_TYPE (Float4x4);
140+ ADD_TYPE (Half2x2);
141+ ADD_TYPE (Half2x3);
142+ ADD_TYPE (Half2x4);
143+ ADD_TYPE (Half3x2);
144+ ADD_TYPE (Half3x3);
145+ ADD_TYPE (Half3x4);
146+ ADD_TYPE (Half4x2);
147+ ADD_TYPE (Half4x3);
148+ ADD_TYPE (Half4x4);
149+ ADD_TYPE (GenType);
150+ ADD_TYPE (GenHType);
151+ ADD_TYPE (GenIType);
152+ ADD_TYPE (GenUType);
153+ ADD_TYPE (GenBType);
154+ ADD_TYPE (Mat);
155+ ADD_TYPE (Vec);
156+ ADD_TYPE (GVec);
157+ ADD_TYPE (GVec2);
158+ ADD_TYPE (GVec3);
159+ ADD_TYPE (GVec4);
160+ ADD_TYPE (HVec);
161+ ADD_TYPE (IVec);
162+ ADD_TYPE (UVec);
163+ ADD_TYPE (SVec);
164+ ADD_TYPE (USVec);
165+ ADD_TYPE (ByteVec);
166+ ADD_TYPE (UByteVec);
167+ ADD_TYPE (BVec);
168+
169+ ADD_TYPE (Sampler1D);
170+ ADD_TYPE (Sampler2D);
171+ ADD_TYPE (Sampler3D);
172+ ADD_TYPE (SamplerExternalOES);
173+ ADD_TYPE (SamplerCube);
174+ ADD_TYPE (Sampler2DRect);
175+ ADD_TYPE (Sampler1DArray);
176+ ADD_TYPE (Sampler2DArray);
177+ ADD_TYPE (SamplerCubeArray);
178+ ADD_TYPE (SamplerBuffer);
179+ ADD_TYPE (Sampler2DMS);
180+ ADD_TYPE (Sampler2DMSArray);
181+
182+ ADD_TYPE (ISampler2D);
183+
184+ ADD_TYPE (Image2D);
185+ ADD_TYPE (IImage2D);
186+
187+ ADD_TYPE (SubpassInput);
188+ ADD_TYPE (SubpassInputMS);
189+
190+ ADD_TYPE (GSampler1D);
191+ ADD_TYPE (GSampler2D);
192+ ADD_TYPE (GSampler3D);
193+ ADD_TYPE (GSamplerCube);
194+ ADD_TYPE (GSampler2DRect);
195+ ADD_TYPE (GSampler1DArray);
196+ ADD_TYPE (GSampler2DArray);
197+ ADD_TYPE (GSamplerCubeArray);
198+ ADD_TYPE (GSamplerBuffer);
199+ ADD_TYPE (GSampler2DMS);
200+ ADD_TYPE (GSampler2DMSArray);
201+
202+ ADD_TYPE (Sampler1DShadow);
203+ ADD_TYPE (Sampler2DShadow);
204+ ADD_TYPE (SamplerCubeShadow);
205+ ADD_TYPE (Sampler2DRectShadow);
206+ ADD_TYPE (Sampler1DArrayShadow);
207+ ADD_TYPE (Sampler2DArrayShadow);
208+ ADD_TYPE (SamplerCubeArrayShadow);
209+ ADD_TYPE (GSampler2DArrayShadow);
210+ ADD_TYPE (GSamplerCubeArrayShadow);
211+ ADD_TYPE (FragmentProcessor);
212+ ADD_TYPE (Sampler);
213+ ADD_TYPE (Texture2D);
165214
166215 // sk_Caps is "builtin", but all references to it are resolved to Settings, so we don't need to
167216 // treat it as builtin (ie, no need to clone it into the Program).
168- fPrivateSymbolTable -> add (
169- std::make_unique<Variable>(/* offset=*/ -1 ,
170- fIRGenerator ->fModifiers ->handle (Modifiers ()),
171- " sk_Caps " ,
172- fContext ->fSkCaps_Type .get (),
173- /* builtin=*/ false ,
174- Variable::Storage::kGlobal ));
217+ StringFragment skCapsName ( " sk_Caps " );
218+ fRootSymbolTable -> add ( std::make_unique<Variable>(/* offset=*/ -1 ,
219+ fIRGenerator ->fModifiers ->handle (Modifiers ()),
220+ skCapsName ,
221+ fContext ->fSkCaps_Type .get (),
222+ /* builtin=*/ false ,
223+ Variable::Storage::kGlobal ));
175224
176225 fRootModule = {fRootSymbolTable , /* fIntrinsics=*/ nullptr };
177- fPrivateModule = {fPrivateSymbolTable , /* fIntrinsics=*/ nullptr };
178226
179- fGPUModule = this ->parseModule (Program::kFragment_Kind , MODULE_DATA (gpu), fPrivateModule );
227+ fGPUModule = this ->parseModule (Program::kFragment_Kind , MODULE_DATA (gpu), fRootModule );
180228 fVertexModule = this ->parseModule (Program::kVertex_Kind , MODULE_DATA (vert), fGPUModule );
181229 fFragmentModule = this ->parseModule (Program::kFragment_Kind , MODULE_DATA (frag), fGPUModule );
182230}
@@ -198,17 +246,10 @@ const ParsedModule& Compiler::loadFPModule() {
198246 return fFPModule ;
199247}
200248
201- const ParsedModule& Compiler::loadPublicModule () {
202- if (!fPublicModule .fSymbols ) {
203- fPublicModule = this ->parseModule (Program::kGeneric_Kind , MODULE_DATA (public), fRootModule );
204- }
205- return fPublicModule ;
206- }
207-
208249const ParsedModule& Compiler::loadPipelineModule () {
209250 if (!fPipelineModule .fSymbols ) {
210- fPipelineModule = this -> parseModule (Program:: kPipelineStage_Kind , MODULE_DATA (pipeline),
211- this ->loadPublicModule () );
251+ fPipelineModule =
252+ this ->parseModule (Program:: kPipelineStage_Kind , MODULE_DATA (pipeline), fGPUModule );
212253
213254 // Add some aliases to the pipeline module so that it's friendlier, and more like GLSL
214255 fPipelineModule .fSymbols ->addAlias (" shader" , fContext ->fFragmentProcessor_Type .get ());
@@ -242,8 +283,8 @@ const ParsedModule& Compiler::loadPipelineModule() {
242283
243284const ParsedModule& Compiler::loadInterpreterModule () {
244285 if (!fInterpreterModule .fSymbols ) {
245- fInterpreterModule = this -> parseModule (Program:: kGeneric_Kind , MODULE_DATA (interp),
246- this ->loadPublicModule () );
286+ fInterpreterModule =
287+ this ->parseModule (Program:: kGeneric_Kind , MODULE_DATA (interp), fRootModule );
247288 }
248289 return fInterpreterModule ;
249290}
@@ -264,13 +305,7 @@ LoadedModule Compiler::loadModule(Program::Kind kind,
264305 ModuleData data,
265306 std::shared_ptr<SymbolTable> base) {
266307 if (!base) {
267- // NOTE: This is a workaround. The only time 'base' is null is when dehydrating includes.
268- // In that case, skslc doesn't know which module it's preparing, nor what the correct base
269- // module is. We can't use 'Root', because many GPU intrinsics reference private types,
270- // like samplers or textures. Today, 'Private' does contain the union of all known types,
271- // so this is safe. If we ever have types that only exist in 'Public' (for example), this
272- // logic needs to be smarter (by choosing the correct base for the module we're compiling).
273- base = fPrivateSymbolTable ;
308+ base = fRootSymbolTable ;
274309 }
275310
276311#if defined(SKSL_STANDALONE)
0 commit comments