Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Member Functions | List of all members
SkSL::ModuleLoader Class Reference

#include <SkSLModuleLoader.h>

Classes

struct  Impl
 

Public Member Functions

 ModuleLoader (ModuleLoader::Impl &)
 
 ~ModuleLoader ()
 
const BuiltinTypesbuiltinTypes ()
 
const ModulerootModule ()
 
const ModuleloadSharedModule (SkSL::Compiler *compiler)
 
const ModuleloadGPUModule (SkSL::Compiler *compiler)
 
const ModuleloadVertexModule (SkSL::Compiler *compiler)
 
const ModuleloadFragmentModule (SkSL::Compiler *compiler)
 
const ModuleloadComputeModule (SkSL::Compiler *compiler)
 
const ModuleloadGraphiteVertexModule (SkSL::Compiler *compiler)
 
const ModuleloadGraphiteFragmentModule (SkSL::Compiler *compiler)
 
const ModuleloadGraphiteVertexES2Module (SkSL::Compiler *compiler)
 
const ModuleloadGraphiteFragmentES2Module (SkSL::Compiler *compiler)
 
const ModuleloadPublicModule (SkSL::Compiler *compiler)
 
const ModuleloadPrivateRTShaderModule (SkSL::Compiler *compiler)
 
void addPublicTypeAliases (const SkSL::Module *module)
 
void unloadModules ()
 

Static Public Member Functions

static ModuleLoader Get ()
 

Detailed Description

Definition at line 22 of file SkSLModuleLoader.h.

Constructor & Destructor Documentation

◆ ModuleLoader()

SkSL::ModuleLoader::ModuleLoader ( ModuleLoader::Impl m)

Definition at line 181 of file SkSLModuleLoader.cpp.

181 : fModuleLoader(m) {
182 fModuleLoader.fMutex.acquire();
183}

◆ ~ModuleLoader()

SkSL::ModuleLoader::~ModuleLoader ( )

Definition at line 185 of file SkSLModuleLoader.cpp.

185 {
186 fModuleLoader.fMutex.release();
187}

Member Function Documentation

◆ addPublicTypeAliases()

void SkSL::ModuleLoader::addPublicTypeAliases ( const SkSL::Module module)

Definition at line 257 of file SkSLModuleLoader.cpp.

257 {
258 const SkSL::BuiltinTypes& types = this->builtinTypes();
259 SymbolTable* symbols = module->fSymbols.get();
260
261 // Add some aliases to the runtime effect modules so that it's friendlier, and more like GLSL.
262 symbols->addWithoutOwnershipOrDie(types.fVec2.get());
263 symbols->addWithoutOwnershipOrDie(types.fVec3.get());
264 symbols->addWithoutOwnershipOrDie(types.fVec4.get());
265
266 symbols->addWithoutOwnershipOrDie(types.fIVec2.get());
267 symbols->addWithoutOwnershipOrDie(types.fIVec3.get());
268 symbols->addWithoutOwnershipOrDie(types.fIVec4.get());
269
270 symbols->addWithoutOwnershipOrDie(types.fBVec2.get());
271 symbols->addWithoutOwnershipOrDie(types.fBVec3.get());
272 symbols->addWithoutOwnershipOrDie(types.fBVec4.get());
273
274 symbols->addWithoutOwnershipOrDie(types.fMat2.get());
275 symbols->addWithoutOwnershipOrDie(types.fMat3.get());
276 symbols->addWithoutOwnershipOrDie(types.fMat4.get());
277
278 symbols->addWithoutOwnershipOrDie(types.fMat2x2.get());
279 symbols->addWithoutOwnershipOrDie(types.fMat2x3.get());
280 symbols->addWithoutOwnershipOrDie(types.fMat2x4.get());
281 symbols->addWithoutOwnershipOrDie(types.fMat3x2.get());
282 symbols->addWithoutOwnershipOrDie(types.fMat3x3.get());
283 symbols->addWithoutOwnershipOrDie(types.fMat3x4.get());
284 symbols->addWithoutOwnershipOrDie(types.fMat4x2.get());
285 symbols->addWithoutOwnershipOrDie(types.fMat4x3.get());
286 symbols->addWithoutOwnershipOrDie(types.fMat4x4.get());
287
288 // Hide all the private symbols by aliasing them all to "invalid". This will prevent code from
289 // using built-in names like `sampler2D` as variable names.
290 for (BuiltinTypePtr privateType : kPrivateTypes) {
291 symbols->inject(Type::MakeAliasType((types.*privateType)->name(), *types.fInvalid));
292 }
293}
const std::unique_ptr< Type > fMat4x4
const std::unique_ptr< Type > fMat4x2
const std::unique_ptr< Type > fMat2x4
const std::unique_ptr< Type > fMat2
const std::unique_ptr< Type > fBVec2
const std::unique_ptr< Type > fMat4
const std::unique_ptr< Type > fMat4x3
const std::unique_ptr< Type > fMat2x2
const std::unique_ptr< Type > fInvalid
const std::unique_ptr< Type > fBVec3
const std::unique_ptr< Type > fBVec4
const std::unique_ptr< Type > fVec4
const std::unique_ptr< Type > fVec3
const std::unique_ptr< Type > fIVec3
const std::unique_ptr< Type > fIVec4
const std::unique_ptr< Type > fIVec2
const std::unique_ptr< Type > fMat3
const std::unique_ptr< Type > fMat3x4
const std::unique_ptr< Type > fMat3x3
const std::unique_ptr< Type > fMat2x3
const std::unique_ptr< Type > fMat3x2
const std::unique_ptr< Type > fVec2
const BuiltinTypes & builtinTypes()
static std::unique_ptr< Type > MakeAliasType(std::string_view name, const Type &targetType)
Definition SkSLType.cpp:764
const std::unique_ptr< Type > BuiltinTypes::* BuiltinTypePtr
static constexpr BuiltinTypePtr kPrivateTypes[]

◆ builtinTypes()

const BuiltinTypes & SkSL::ModuleLoader::builtinTypes ( )

Definition at line 249 of file SkSLModuleLoader.cpp.

249 {
250 return fModuleLoader.fBuiltinTypes;
251}
const BuiltinTypes fBuiltinTypes

◆ Get()

ModuleLoader SkSL::ModuleLoader::Get ( )
static

Definition at line 176 of file SkSLModuleLoader.cpp.

176 {
177 static SkNoDestructor<ModuleLoader::Impl> sModuleLoaderImpl;
178 return ModuleLoader(*sModuleLoaderImpl);
179}
ModuleLoader(ModuleLoader::Impl &)

◆ loadComputeModule()

const Module * SkSL::ModuleLoader::loadComputeModule ( SkSL::Compiler compiler)

Definition at line 362 of file SkSLModuleLoader.cpp.

362 {
363 if (!fModuleLoader.fComputeModule) {
364 const Module* gpuModule = this->loadGPUModule(compiler);
367 MODULE_DATA(sksl_compute),
368 gpuModule);
369 }
370 return fModuleLoader.fComputeModule.get();
371}
#define MODULE_DATA(name)
const Module * loadGPUModule(SkSL::Compiler *compiler)
static std::unique_ptr< Module > compile_and_shrink(SkSL::Compiler *compiler, ProgramKind kind, const char *moduleName, std::string moduleSource, const Module *parent)
std::unique_ptr< const Module > fComputeModule

◆ loadFragmentModule()

const Module * SkSL::ModuleLoader::loadFragmentModule ( SkSL::Compiler compiler)

Definition at line 340 of file SkSLModuleLoader.cpp.

340 {
341 if (!fModuleLoader.fFragmentModule) {
342 const Module* gpuModule = this->loadGPUModule(compiler);
345 MODULE_DATA(sksl_frag),
346 gpuModule);
347 }
348 return fModuleLoader.fFragmentModule.get();
349}
std::unique_ptr< const Module > fFragmentModule

◆ loadGPUModule()

const Module * SkSL::ModuleLoader::loadGPUModule ( SkSL::Compiler compiler)

Definition at line 329 of file SkSLModuleLoader.cpp.

329 {
330 if (!fModuleLoader.fGPUModule) {
331 const Module* sharedModule = this->loadSharedModule(compiler);
332 fModuleLoader.fGPUModule = compile_and_shrink(compiler,
334 MODULE_DATA(sksl_gpu),
335 sharedModule);
336 }
337 return fModuleLoader.fGPUModule.get();
338}
const Module * loadSharedModule(SkSL::Compiler *compiler)
std::unique_ptr< const Module > fGPUModule

◆ loadGraphiteFragmentES2Module()

const Module * SkSL::ModuleLoader::loadGraphiteFragmentES2Module ( SkSL::Compiler compiler)

Definition at line 388 of file SkSLModuleLoader.cpp.

388 {
389#if defined(SK_GRAPHITE)
390 if (!fModuleLoader.fGraphiteFragmentES2Module) {
391 const Module* fragmentModule = this->loadFragmentModule(compiler);
392 fModuleLoader.fGraphiteFragmentES2Module =
395 MODULE_DATA(sksl_graphite_frag_es2),
396 fragmentModule);
397 }
398 return fModuleLoader.fGraphiteFragmentES2Module.get();
399#else
400 return this->loadFragmentModule(compiler);
401#endif
402}
const Module * loadFragmentModule(SkSL::Compiler *compiler)
std::unique_ptr< const Module > fGraphiteFragmentES2Module

◆ loadGraphiteFragmentModule()

const Module * SkSL::ModuleLoader::loadGraphiteFragmentModule ( SkSL::Compiler compiler)

Definition at line 373 of file SkSLModuleLoader.cpp.

373 {
374#if defined(SK_GRAPHITE)
375 if (!fModuleLoader.fGraphiteFragmentModule) {
376 const Module* fragmentModule = this->loadFragmentModule(compiler);
379 MODULE_DATA(sksl_graphite_frag),
380 fragmentModule);
381 }
382 return fModuleLoader.fGraphiteFragmentModule.get();
383#else
384 return this->loadFragmentModule(compiler);
385#endif
386}
std::unique_ptr< const Module > fGraphiteFragmentModule

◆ loadGraphiteVertexES2Module()

const Module * SkSL::ModuleLoader::loadGraphiteVertexES2Module ( SkSL::Compiler compiler)

Definition at line 419 of file SkSLModuleLoader.cpp.

419 {
420#if defined(SK_GRAPHITE)
421 if (!fModuleLoader.fGraphiteVertexES2Module) {
422 const Module* vertexModule = this->loadVertexModule(compiler);
423 fModuleLoader.fGraphiteVertexES2Module =
426 MODULE_DATA(sksl_graphite_vert_es2),
427 vertexModule);
428 }
429 return fModuleLoader.fGraphiteVertexES2Module.get();
430#else
431 return this->loadVertexModule(compiler);
432#endif
433}
const Module * loadVertexModule(SkSL::Compiler *compiler)
std::unique_ptr< const Module > fGraphiteVertexES2Module

◆ loadGraphiteVertexModule()

const Module * SkSL::ModuleLoader::loadGraphiteVertexModule ( SkSL::Compiler compiler)

Definition at line 404 of file SkSLModuleLoader.cpp.

404 {
405#if defined(SK_GRAPHITE)
406 if (!fModuleLoader.fGraphiteVertexModule) {
407 const Module* vertexModule = this->loadVertexModule(compiler);
410 MODULE_DATA(sksl_graphite_vert),
411 vertexModule);
412 }
413 return fModuleLoader.fGraphiteVertexModule.get();
414#else
415 return this->loadVertexModule(compiler);
416#endif
417}
std::unique_ptr< const Module > fGraphiteVertexModule

◆ loadPrivateRTShaderModule()

const Module * SkSL::ModuleLoader::loadPrivateRTShaderModule ( SkSL::Compiler compiler)

Definition at line 307 of file SkSLModuleLoader.cpp.

307 {
308 if (!fModuleLoader.fRuntimeShaderModule) {
309 const Module* publicModule = this->loadPublicModule(compiler);
312 MODULE_DATA(sksl_rt_shader),
313 publicModule);
314 }
315 return fModuleLoader.fRuntimeShaderModule.get();
316}
const Module * loadPublicModule(SkSL::Compiler *compiler)
std::unique_ptr< const Module > fRuntimeShaderModule

◆ loadPublicModule()

const Module * SkSL::ModuleLoader::loadPublicModule ( SkSL::Compiler compiler)

Definition at line 295 of file SkSLModuleLoader.cpp.

295 {
296 if (!fModuleLoader.fPublicModule) {
297 const Module* sharedModule = this->loadSharedModule(compiler);
300 MODULE_DATA(sksl_public),
301 sharedModule);
302 this->addPublicTypeAliases(fModuleLoader.fPublicModule.get());
303 }
304 return fModuleLoader.fPublicModule.get();
305}
void addPublicTypeAliases(const SkSL::Module *module)
std::unique_ptr< const Module > fPublicModule

◆ loadSharedModule()

const Module * SkSL::ModuleLoader::loadSharedModule ( SkSL::Compiler compiler)

Definition at line 318 of file SkSLModuleLoader.cpp.

318 {
319 if (!fModuleLoader.fSharedModule) {
320 const Module* rootModule = this->rootModule();
323 MODULE_DATA(sksl_shared),
324 rootModule);
325 }
326 return fModuleLoader.fSharedModule.get();
327}
const Module * rootModule()
std::unique_ptr< const Module > fSharedModule

◆ loadVertexModule()

const Module * SkSL::ModuleLoader::loadVertexModule ( SkSL::Compiler compiler)

Definition at line 351 of file SkSLModuleLoader.cpp.

351 {
352 if (!fModuleLoader.fVertexModule) {
353 const Module* gpuModule = this->loadGPUModule(compiler);
356 MODULE_DATA(sksl_vert),
357 gpuModule);
358 }
359 return fModuleLoader.fVertexModule.get();
360}
std::unique_ptr< const Module > fVertexModule

◆ rootModule()

const Module * SkSL::ModuleLoader::rootModule ( )

Definition at line 253 of file SkSLModuleLoader.cpp.

253 {
254 return fModuleLoader.fRootModule.get();
255}
std::unique_ptr< const Module > fRootModule

◆ unloadModules()

void SkSL::ModuleLoader::unloadModules ( )

Definition at line 189 of file SkSLModuleLoader.cpp.

189 {
190 fModuleLoader.fSharedModule = nullptr;
191 fModuleLoader.fGPUModule = nullptr;
192 fModuleLoader.fVertexModule = nullptr;
193 fModuleLoader.fFragmentModule = nullptr;
194 fModuleLoader.fComputeModule = nullptr;
195 fModuleLoader.fGraphiteVertexModule = nullptr;
196 fModuleLoader.fGraphiteFragmentModule = nullptr;
197 fModuleLoader.fPublicModule = nullptr;
198 fModuleLoader.fRuntimeShaderModule = nullptr;
199}

The documentation for this class was generated from the following files: