skia2/gm/dsl_processor_test.cpp
Brian Salomon b25560a1e1 Consistency among GrFP::ProgramImpl subclasses
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>
2021-08-11 13:59:46 +00:00

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>());
}