skia2/tests/sksl/fp/GrConditionalInUniform.cpp
Brian Osman 48d7f7ca20 Add new style key information to several core effects
Covers some common geometry processors, texture effect, etc.

This also rearranges how fp keys are arranged in the overall key. We no
longer include the key size as part of the key - this made no sense.
Instead, we explicitly include the number of children. We also put all
data for one fp before any children, so the tree can be reconstructed
more-or-less top-down.

Finally, added an "addBool" helper that reads nicer than addBits(1)
everywhere.

Bug: skia:11372
Change-Id: I4e35257fb5923d88fe6d7522109a0b3f4c4017d4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/379059
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
2021-03-04 14:49:07 +00:00

81 lines
3.1 KiB
C++

/**************************************************************************************************
*** This file was autogenerated from GrConditionalInUniform.fp; do not modify.
**************************************************************************************************/
#include "GrConditionalInUniform.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 GrGLSLConditionalInUniform : public GrGLSLFragmentProcessor {
public:
GrGLSLConditionalInUniform() {}
void emitCode(EmitArgs& args) override {
GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
const GrConditionalInUniform& _outer = args.fFp.cast<GrConditionalInUniform>();
(void) _outer;
auto test = _outer.test;
(void) test;
auto color = _outer.color;
(void) color;
if (test) {
colorVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf4_GrSLType, "color");
}
fragBuilder->codeAppendf(
R"SkSL(if (%s) {
return %s;
} else {
return half4(1.0);
}
)SkSL"
, (_outer.test ? "true" : "false"), colorVar.isValid() ? args.fUniformHandler->getUniformCStr(colorVar) : "half4(0)");
}
private:
void onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& _proc) override {
const GrConditionalInUniform& _outer = _proc.cast<GrConditionalInUniform>();
{
if (colorVar.isValid()) {
const SkPMColor4f& colorValue = _outer.color;
if (colorPrev != colorValue) {
colorPrev = colorValue;
pdman.set4fv(colorVar, 1, colorValue.vec());
}
}
}
}
SkPMColor4f colorPrev = {SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN};
UniformHandle colorVar;
};
std::unique_ptr<GrGLSLFragmentProcessor> GrConditionalInUniform::onMakeProgramImpl() const {
return std::make_unique<GrGLSLConditionalInUniform>();
}
void GrConditionalInUniform::onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const {
b->addBool(test, "test");
}
bool GrConditionalInUniform::onIsEqual(const GrFragmentProcessor& other) const {
const GrConditionalInUniform& that = other.cast<GrConditionalInUniform>();
(void) that;
if (test != that.test) return false;
if (color != that.color) return false;
return true;
}
GrConditionalInUniform::GrConditionalInUniform(const GrConditionalInUniform& src)
: INHERITED(kGrConditionalInUniform_ClassID, src.optimizationFlags())
, test(src.test)
, color(src.color) {
this->cloneAndRegisterAllChildProcessors(src);
}
std::unique_ptr<GrFragmentProcessor> GrConditionalInUniform::clone() const {
return std::make_unique<GrConditionalInUniform>(*this);
}
#if GR_TEST_UTILS
SkString GrConditionalInUniform::onDumpInfo() const {
return SkStringPrintf("(test=%s, color=half4(%f, %f, %f, %f))", (test ? "true" : "false"), color.fR, color.fG, color.fB, color.fA);
}
#endif