GrGLVaryingHandler.cpp revision c08f196648463d44eb85e17c5815dbf8f709a42a
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
14GrGLSLVaryingHandler::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->fArgs.fPrimitiveProcessor->isPathRendering() &&
23             !glPB->fArgs.fPrimitiveProcessor->willUseGeoShader() &&
24             glPB->fArgs.fPrimitiveProcessor->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
32void 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