b25560a1e1
Remove GL or GLSL from names of subclasses. Make nearly all subclasses nested either in FP class or its onMakeProgramImpl() function. Make onSetData private rather than protected. Remove unused INHERITED typedefs. Embrace idea that Impl is part of FP private implementation: direct member access rather than getters and no GenKey pattern. Other random consistency updates, modernatizations, stylistic changes. Bug: skia:11358 Change-Id: I0d94e00a146abdd38e094ca550fc3b9608bd433d Reviewed-on: https://skia-review.googlesource.com/c/skia/+/438056 Reviewed-by: Michael Ludwig <michaelludwig@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
70 lines
2.4 KiB
C++
70 lines
2.4 KiB
C++
/*
|
|
* Copyright 2021 Google LLC.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "gm/gm.h"
|
|
#include "include/effects/SkRuntimeEffect.h"
|
|
#include "src/core/SkCanvasPriv.h"
|
|
#include "src/gpu/SurfaceFillContext.h"
|
|
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
|
|
#include "src/sksl/dsl/priv/DSLFPs.h"
|
|
#include "src/sksl/dsl/priv/DSLWriter.h"
|
|
#include "src/sksl/ir/SkSLVariable.h"
|
|
|
|
class SimpleDSLEffect : public GrFragmentProcessor {
|
|
public:
|
|
static constexpr GrProcessor::ClassID CLASS_ID = (GrProcessor::ClassID) 100;
|
|
|
|
SimpleDSLEffect() : GrFragmentProcessor(CLASS_ID, kNone_OptimizationFlags) {
|
|
}
|
|
|
|
const char* name() const override { return "DSLEffect"; }
|
|
void onAddToKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {}
|
|
bool onIsEqual(const GrFragmentProcessor& that) const override { return this == &that; }
|
|
std::unique_ptr<GrFragmentProcessor> clone() const override { return nullptr; }
|
|
|
|
std::unique_ptr<ProgramImpl> onMakeProgramImpl() const override {
|
|
class Impl : public ProgramImpl {
|
|
public:
|
|
void emitCode(EmitArgs& args) override {
|
|
using namespace SkSL::dsl;
|
|
StartFragmentProcessor(this, &args);
|
|
|
|
// Test for skbug.com/11384
|
|
Var x(kInt_Type, 1);
|
|
Declare(x);
|
|
SkASSERT(DSLWriter::Var(x)->initialValue()->description() == "1");
|
|
|
|
GlobalVar blueAlpha(kUniform_Modifier, kHalf2_Type, "blueAlpha");
|
|
Declare(blueAlpha);
|
|
fBlueAlphaUniform = VarUniformHandle(blueAlpha);
|
|
Var coords(kFloat4_Type, sk_FragCoord());
|
|
Declare(coords);
|
|
Return(Half4(Swizzle(coords, X, Y) / 100, blueAlpha));
|
|
EndFragmentProcessor();
|
|
}
|
|
|
|
private:
|
|
void onSetData(const GrGLSLProgramDataManager& pdman,
|
|
const GrFragmentProcessor& effect) override {
|
|
pdman.set2f(fBlueAlphaUniform, 0.0, 1.0);
|
|
}
|
|
|
|
GrGLSLProgramDataManager::UniformHandle fBlueAlphaUniform;
|
|
};
|
|
return std::make_unique<Impl>();
|
|
}
|
|
};
|
|
|
|
DEF_SIMPLE_GPU_GM(simple_dsl_test, rContext, canvas, 100, 100) {
|
|
auto sfc = SkCanvasPriv::TopDeviceSurfaceFillContext(canvas);
|
|
if (!sfc) {
|
|
return;
|
|
}
|
|
|
|
sfc->fillWithFP(std::make_unique<SimpleDSLEffect>());
|
|
}
|