diff options
author | 2017-12-22 02:24:53 -0700 | |
---|---|---|
committer | 2017-12-22 18:42:05 +0000 | |
commit | e3877ce5ceb7842b61d54bebcc51864e5787a2bc (patch) | |
tree | 60496eb4538ae408f46471db1b394602abd519c9 /src/gpu/ccpr/GrCCPRCoverageProcessor.cpp | |
parent | 92c7fa6b009b3ea4e93ca179153f837c2d9d7962 (diff) |
CCPR: Initial semi-optimized vertex shader Impl
TBR=bsalomon@google.com
Bug: skia:
Change-Id: I24173e146d8c95cec5f29e8cb4fa5e2c28f9a33c
Reviewed-on: https://skia-review.googlesource.com/89120
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Diffstat (limited to 'src/gpu/ccpr/GrCCPRCoverageProcessor.cpp')
-rw-r--r-- | src/gpu/ccpr/GrCCPRCoverageProcessor.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp b/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp index 3a456fda00..11e847fcc6 100644 --- a/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp +++ b/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp @@ -11,17 +11,21 @@ #include "ccpr/GrCCPRCubicShader.h" #include "ccpr/GrCCPRQuadraticShader.h" #include "ccpr/GrCCPRTriangleShader.h" +#include "glsl/GrGLSLVertexGeoBuilder.h" #include "glsl/GrGLSLFragmentShaderBuilder.h" #include "glsl/GrGLSLVertexGeoBuilder.h" void GrCCPRCoverageProcessor::Shader::emitVaryings(GrGLSLVaryingHandler* varyingHandler, - SkString* code, const char* position, - const char* coverage, const char* wind) { - WindHandling windHandling = this->onEmitVaryings(varyingHandler, code, position, coverage, - wind); + GrGLSLVarying::Scope scope, SkString* code, + const char* position, const char* coverage, + const char* wind) { + SkASSERT(GrGLSLVarying::Scope::kVertToGeo != scope); + WindHandling windHandling = this->onEmitVaryings(varyingHandler, scope, code, position, + coverage, wind); if (WindHandling::kNotHandled == windHandling) { + fWind.reset(kHalf_GrSLType, scope); varyingHandler->addFlatVarying("wind", &fWind); - code->appendf("%s = %s;", fWind.gsOut(), wind); + code->appendf("%s = %s;", OutName(fWind), wind); } } @@ -80,7 +84,16 @@ int GrCCPRCoverageProcessor::Shader::DefineSoftSampleLocations(GrGLSLPPFragmentB void GrCCPRCoverageProcessor::getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const { - b->add32((int)fRenderPass); + int key = (int)fRenderPass << 1; + if (Impl::kGeometryShader == fImpl) { + key |= 1; + } +#ifdef SK_DEBUG + uint32_t bloatBits; + memcpy(&bloatBits, &fDebugBloat, 4); + b->add32(bloatBits); +#endif + b->add32(key); } GrGLSLPrimitiveProcessor* GrCCPRCoverageProcessor::createGLSLInstance(const GrShaderCaps&) const { @@ -106,5 +119,6 @@ GrGLSLPrimitiveProcessor* GrCCPRCoverageProcessor::createGLSLInstance(const GrSh shader = skstd::make_unique<GrCCPRCubicCornerShader>(); break; } - return this->createGSImpl(std::move(shader)); + return Impl::kGeometryShader == fImpl ? this->createGSImpl(std::move(shader)) + : this->createVSImpl(std::move(shader)); } |