1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "gl/GrGLVaryingHandler.h"
9 
10 #include "gl/GrGLGpu.h"
11 #include "gl/builders/GrGLProgramBuilder.h"
12 
13 
addPathProcessingVarying(const char * name,GrGLSLVertToFrag * v,GrSLPrecision fsPrecision)14 GrGLSLVaryingHandler::VaryingHandle GrGLVaryingHandler::addPathProcessingVarying(
15                                                                        const char* name,
16                                                                        GrGLSLVertToFrag* v,
17                                                                        GrSLPrecision fsPrecision) {
18 #ifdef SK_DEBUG
19     GrGLProgramBuilder* glPB = (GrGLProgramBuilder*) fProgramBuilder;
20     // This call is not used for non-NVPR backends.
21     SkASSERT(glPB->gpu()->glCaps().shaderCaps()->pathRenderingSupport() &&
22              glPB->fPrimProc.isPathRendering() &&
23              !glPB->fPrimProc.willUseGeoShader() &&
24              glPB->fPrimProc.numAttribs() == 0);
25 #endif
26     this->addVarying(name, v, fsPrecision);
27     auto varyingInfo = fPathProcVaryingInfos.push_back();
28     varyingInfo.fLocation = fPathProcVaryingInfos.count() - 1;
29     return VaryingHandle(varyingInfo.fLocation);
30 }
31 
onFinalize()32 void GrGLVaryingHandler::onFinalize() {
33     SkASSERT(fPathProcVaryingInfos.empty() || fPathProcVaryingInfos.count() == fFragInputs.count());
34     for (int i = 0; i < fPathProcVaryingInfos.count(); ++i) {
35         fPathProcVaryingInfos[i].fVariable = fFragInputs[i];
36     }
37 }
38