6e7cfaff18
Previously, temp variables created by sample() calls were named after the offset of the sample() call within the code. This was straightforward but would fail if the sample() call were duplicated via inlining of helper functions. FP sample() temp variables are now named using a counter, starting from zero and counting upwards. Change-Id: I16f9a3426117677c0df13d15772320def99cc0d6 Bug: skia:10858 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/331415 Commit-Queue: John Stiles <johnstiles@google.com> Reviewed-by: Brian Osman <brianosman@google.com> Auto-Submit: John Stiles <johnstiles@google.com>
71 lines
3.0 KiB
C++
71 lines
3.0 KiB
C++
|
|
|
|
/**************************************************************************************************
|
|
*** This file was autogenerated from GrChildProcessorSampleMatrixAndCoords.fp; do not modify.
|
|
**************************************************************************************************/
|
|
#include "GrChildProcessorSampleMatrixAndCoords.h"
|
|
|
|
#include "src/core/SkUtils.h"
|
|
#include "src/gpu/GrTexture.h"
|
|
#include "src/gpu/glsl/GrGLSLFragmentProcessor.h"
|
|
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
|
|
#include "src/gpu/glsl/GrGLSLProgramBuilder.h"
|
|
#include "src/sksl/SkSLCPP.h"
|
|
#include "src/sksl/SkSLUtil.h"
|
|
class GrGLSLChildProcessorSampleMatrixAndCoords : public GrGLSLFragmentProcessor {
|
|
public:
|
|
GrGLSLChildProcessorSampleMatrixAndCoords() {}
|
|
void emitCode(EmitArgs& args) override {
|
|
GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
|
|
const GrChildProcessorSampleMatrixAndCoords& _outer = args.fFp.cast<GrChildProcessorSampleMatrixAndCoords>();
|
|
(void) _outer;
|
|
colorVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf4_GrSLType, "color");
|
|
fragBuilder->codeAppendf(
|
|
R"SkSL(float3x3 matrix = float3x3(float(%s.w));)SkSL"
|
|
, args.fUniformHandler->getUniformCStr(colorVar));
|
|
SkString _matrix0("matrix");
|
|
SkString _sample0 = this->invokeChildWithMatrix(0, args, _matrix0.c_str());
|
|
fragBuilder->codeAppendf(
|
|
R"SkSL(
|
|
%s = %s;)SkSL"
|
|
, args.fOutputColor, _sample0.c_str());
|
|
SkString _coords1 = SkStringPrintf("%s / 2.0", args.fSampleCoord);
|
|
SkString _sample1 = this->invokeChild(0, args, _coords1.c_str());
|
|
fragBuilder->codeAppendf(
|
|
R"SkSL(
|
|
%s = %s;
|
|
)SkSL"
|
|
, args.fOutputColor, _sample1.c_str());
|
|
}
|
|
private:
|
|
void onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& _proc) override {
|
|
}
|
|
UniformHandle colorVar;
|
|
};
|
|
GrGLSLFragmentProcessor* GrChildProcessorSampleMatrixAndCoords::onCreateGLSLInstance() const {
|
|
return new GrGLSLChildProcessorSampleMatrixAndCoords();
|
|
}
|
|
void GrChildProcessorSampleMatrixAndCoords::onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const {
|
|
}
|
|
bool GrChildProcessorSampleMatrixAndCoords::onIsEqual(const GrFragmentProcessor& other) const {
|
|
const GrChildProcessorSampleMatrixAndCoords& that = other.cast<GrChildProcessorSampleMatrixAndCoords>();
|
|
(void) that;
|
|
return true;
|
|
}
|
|
bool GrChildProcessorSampleMatrixAndCoords::usesExplicitReturn() const {
|
|
return false;
|
|
}
|
|
GrChildProcessorSampleMatrixAndCoords::GrChildProcessorSampleMatrixAndCoords(const GrChildProcessorSampleMatrixAndCoords& src)
|
|
: INHERITED(kGrChildProcessorSampleMatrixAndCoords_ClassID, src.optimizationFlags()) {
|
|
this->cloneAndRegisterAllChildProcessors(src);
|
|
this->setUsesSampleCoordsDirectly();
|
|
}
|
|
std::unique_ptr<GrFragmentProcessor> GrChildProcessorSampleMatrixAndCoords::clone() const {
|
|
return std::make_unique<GrChildProcessorSampleMatrixAndCoords>(*this);
|
|
}
|
|
#if GR_TEST_UTILS
|
|
SkString GrChildProcessorSampleMatrixAndCoords::onDumpInfo() const {
|
|
return SkString();
|
|
}
|
|
#endif
|