Skip to content

Commit 4cb5c5e

Browse files
brianosmanSkia Commit-Bot
authored andcommitted
Revert "Rearrange SkSL pre-include modules to hide things"
This reverts commit bea0dc6. No-Try: true Change-Id: I7b000de199dc23bd3719a4ee835b2a8d3c93fefd Reviewed-on: https://skia-review.googlesource.com/c/skia/+/332747 Commit-Queue: Brian Osman <brianosman@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
1 parent 25f9db4 commit 4cb5c5e

File tree

10 files changed

+1486
-1565
lines changed

10 files changed

+1486
-1565
lines changed

BUILD.gn

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,6 @@ if (skia_compile_processors || skia_compile_sksl_tests) {
604604
"src/sksl/sksl_gpu.sksl",
605605
"src/sksl/sksl_interp.sksl",
606606
"src/sksl/sksl_pipeline.sksl",
607-
"src/sksl/sksl_public.sksl",
608607
"src/sksl/sksl_vert.sksl",
609608
]
610609
outputs = [ "$root_out_dir/{{source_file_part}}" ]

RELEASE_NOTES.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ Milestone 88
99

1010
* <insert new release notes here>
1111

12-
* Limit the types and intrinsics supported in SkRuntimeEffect to GLSL ES 1.00
13-
https://review.skia.org/332597
12+
* Image filters with perspective, for saveLayer and draws, are now drawn correctly. Performance
13+
and quality is highest if user bounds are provided to saveLayer.
14+
https://review.skia.org/328376
1415

1516
* Add AVIF support to SkHeifCodec.
1617

src/sksl/SkSLByteCodeGenerator.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ ByteCodeGenerator::ByteCodeGenerator(const Context* context, const Program* prog
4343
: INHERITED(program, errors, nullptr)
4444
, fContext(*context)
4545
, fOutput(output)
46-
// If you're adding new intrinsics here, ensure that they're declared in sksl_interp.sksl or
47-
// sksl_public.sksl, so they're available to "generic" interpreter programs (eg particles).
48-
// You can probably copy the declarations from sksl_gpu.sksl.
46+
// If you're adding new intrinsics here, ensure that they're declared in sksl_interp.inc, so
47+
// they're available to "generic" interpreter programs (eg particles).
48+
// You can probably copy the declarations from sksl_gpu.inc.
4949
, fIntrinsics {
5050
{ "abs", ByteCodeInstruction::kAbs },
5151
{ "atan", ByteCodeInstruction::kATan },

src/sksl/SkSLCompiler.cpp

Lines changed: 134 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
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-
208249
const 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

243284
const 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)

src/sksl/SkSLCompiler.h

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ class SK_API Compiler : public ErrorReporter {
228228
private:
229229
const ParsedModule& loadFPModule();
230230
const ParsedModule& loadGeometryModule();
231-
const ParsedModule& loadPublicModule();
232231
const ParsedModule& loadInterpreterModule();
233232
const ParsedModule& loadPipelineModule();
234233

@@ -272,20 +271,15 @@ class SK_API Compiler : public ErrorReporter {
272271
const ShaderCapsClass* fCaps = nullptr;
273272

274273
std::shared_ptr<SymbolTable> fRootSymbolTable;
275-
std::shared_ptr<SymbolTable> fPrivateSymbolTable;
276274

277-
ParsedModule fRootModule; // Core types
278-
279-
ParsedModule fPrivateModule; // [Root] + Internal types
280-
ParsedModule fGPUModule; // [Private] + GPU intrinsics, helper functions
281-
ParsedModule fVertexModule; // [GPU] + Vertex stage decls
282-
ParsedModule fFragmentModule; // [GPU] + Fragment stage decls
283-
ParsedModule fGeometryModule; // [GPU] + Geometry stage decls
284-
ParsedModule fFPModule; // [GPU] + FP features
285-
286-
ParsedModule fPublicModule; // [Root] + Public features
287-
ParsedModule fInterpreterModule; // [Public] + Interpreter-only decls
288-
ParsedModule fPipelineModule; // [Public] + Runtime effect decls
275+
ParsedModule fRootModule;
276+
ParsedModule fGPUModule;
277+
ParsedModule fInterpreterModule;
278+
ParsedModule fVertexModule;
279+
ParsedModule fFragmentModule;
280+
ParsedModule fGeometryModule;
281+
ParsedModule fPipelineModule;
282+
ParsedModule fFPModule;
289283

290284
// holds ModifiersPools belonging to the core includes for lifetime purposes
291285
std::vector<std::unique_ptr<ModifiersPool>> fModifiers;

0 commit comments

Comments
 (0)