diff options
Diffstat (limited to 'gfx/skia/skia/src/sksl/codegen/SkSLPipelineStageCodeGenerator.h')
-rw-r--r-- | gfx/skia/skia/src/sksl/codegen/SkSLPipelineStageCodeGenerator.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/sksl/codegen/SkSLPipelineStageCodeGenerator.h b/gfx/skia/skia/src/sksl/codegen/SkSLPipelineStageCodeGenerator.h new file mode 100644 index 0000000000..7efb0e187e --- /dev/null +++ b/gfx/skia/skia/src/sksl/codegen/SkSLPipelineStageCodeGenerator.h @@ -0,0 +1,70 @@ +/* + * Copyright 2017 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SKSL_PIPELINESTAGECODEGENERATOR +#define SKSL_PIPELINESTAGECODEGENERATOR + +#include "include/core/SkTypes.h" + +#if defined(SKSL_STANDALONE) || defined(SK_GANESH) || defined(SK_GRAPHITE) + +#include <string> + +namespace SkSL { + +struct Program; +class VarDeclaration; + +namespace PipelineStage { + class Callbacks { + public: + virtual ~Callbacks() = default; + + virtual std::string getMainName() { return "main"; } + virtual std::string getMangledName(const char* name) { return name; } + virtual void defineFunction(const char* declaration, const char* body, bool isMain) = 0; + virtual void declareFunction(const char* declaration) = 0; + virtual void defineStruct(const char* definition) = 0; + virtual void declareGlobal(const char* declaration) = 0; + + virtual std::string declareUniform(const VarDeclaration*) = 0; + virtual std::string sampleShader(int index, std::string coords) = 0; + virtual std::string sampleColorFilter(int index, std::string color) = 0; + virtual std::string sampleBlender(int index, std::string src, std::string dst) = 0; + + virtual std::string toLinearSrgb(std::string color) = 0; + virtual std::string fromLinearSrgb(std::string color) = 0; + }; + + /* + * Processes 'program' for use in a GrFragmentProcessor, or other context that wants SkSL-like + * code as input. To support fragment processor usage, there are callbacks that allow elements + * to be declared programmatically and to rename those elements (mangling to avoid collisions). + * + * - Any reference to the main coords builtin variable will be replaced with 'sampleCoords'. + * - Any reference to the input color builtin variable will be replaced with 'inputColor'. + * - Any reference to the dest color builtin variable will be replaced with 'destColor'. + * Dest-color is used in blend programs. + * - Each uniform variable declaration triggers a call to 'declareUniform', which should emit + * the declaration, and return the (possibly different) name to use for the variable. + * - Each function definition triggers a call to 'defineFunction', which should emit the + * definition, and return the (possibly different) name to use for calls to that function. + * - Each invocation of sample() triggers a call to 'sampleChild', which should return the full + * text of the call expression. + */ + void ConvertProgram(const Program& program, + const char* sampleCoords, + const char* inputColor, + const char* destColor, + Callbacks* callbacks); +} // namespace PipelineStage + +} // namespace SkSL + +#endif + +#endif |