LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/gpu/glsl - GrGLSLGeometryProcessor.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 59 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 5 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2014 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 "GrGLSLGeometryProcessor.h"
       9             : 
      10             : #include "GrCoordTransform.h"
      11             : #include "glsl/GrGLSLFragmentShaderBuilder.h"
      12             : #include "glsl/GrGLSLUniformHandler.h"
      13             : #include "glsl/GrGLSLVarying.h"
      14             : #include "glsl/GrGLSLVertexShaderBuilder.h"
      15             : 
      16           0 : void GrGLSLGeometryProcessor::emitCode(EmitArgs& args) {
      17           0 :     GrGLSLVertexBuilder* vBuilder = args.fVertBuilder;
      18           0 :     GrGPArgs gpArgs;
      19           0 :     this->onEmitCode(args, &gpArgs);
      20           0 :     vBuilder->transformToNormalizedDeviceSpace(gpArgs.fPositionVar, args.fRTAdjustName);
      21           0 :     if (kVec2f_GrSLType == gpArgs.fPositionVar.getType()) {
      22           0 :         args.fVaryingHandler->setNoPerspective();
      23             :     }
      24           0 : }
      25             : 
      26           0 : void GrGLSLGeometryProcessor::emitTransforms(GrGLSLVertexBuilder* vb,
      27             :                                              GrGLSLVaryingHandler* varyingHandler,
      28             :                                              GrGLSLUniformHandler* uniformHandler,
      29             :                                              const GrShaderVar& posVar,
      30             :                                              const char* localCoords,
      31             :                                              const SkMatrix& localMatrix,
      32             :                                              FPCoordTransformHandler* handler) {
      33           0 :     int i = 0;
      34           0 :     while (const GrCoordTransform* coordTransform = handler->nextCoordTransform()) {
      35           0 :         SkString strUniName;
      36           0 :         strUniName.printf("CoordTransformMatrix_%d", i);
      37             :         GrSLType varyingType;
      38             : 
      39           0 :         uint32_t type = coordTransform->getMatrix().getType();
      40           0 :         type |= localMatrix.getType();
      41             : 
      42           0 :         varyingType = SkToBool(SkMatrix::kPerspective_Mask & type) ? kVec3f_GrSLType :
      43             :                                                                      kVec2f_GrSLType;
      44             :         // Coord transforms are always handled at high precision
      45           0 :         const GrSLPrecision precision = kHigh_GrSLPrecision;
      46             : 
      47             :         const char* uniName;
      48             : 
      49             : 
      50           0 :         fInstalledTransforms.push_back().fHandle = uniformHandler->addUniform(kVertex_GrShaderFlag,
      51             :                                                                               kMat33f_GrSLType,
      52             :                                                                               precision,
      53             :                                                                               strUniName.c_str(),
      54           0 :                                                                               &uniName).toIndex();
      55           0 :         SkString strVaryingName;
      56           0 :         strVaryingName.printf("TransformedCoords_%d", i);
      57             : 
      58           0 :         GrGLSLVertToFrag v(varyingType);
      59           0 :         varyingHandler->addVarying(strVaryingName.c_str(), &v, precision);
      60             : 
      61           0 :         SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyingType);
      62           0 :         handler->specifyCoordsForCurrCoordTransform(SkString(v.fsIn()), varyingType);
      63             : 
      64           0 :         if (kVec2f_GrSLType == varyingType) {
      65           0 :             vb->codeAppendf("%s = (%s * vec3(%s, 1)).xy;", v.vsOut(), uniName, localCoords);
      66             :         } else {
      67           0 :             vb->codeAppendf("%s = %s * vec3(%s, 1);", v.vsOut(), uniName, localCoords);
      68             :         }
      69           0 :         ++i;
      70           0 :     }
      71           0 : }
      72             : 
      73           0 : void GrGLSLGeometryProcessor::setTransformDataHelper(const SkMatrix& localMatrix,
      74             :                                                      const GrGLSLProgramDataManager& pdman,
      75             :                                                      FPCoordTransformIter* transformIter) {
      76           0 :     int i = 0;
      77           0 :     while (const GrCoordTransform* coordTransform = transformIter->next()) {
      78           0 :         const SkMatrix& m = GetTransformMatrix(localMatrix, *coordTransform);
      79           0 :         if (!fInstalledTransforms[i].fCurrentValue.cheapEqualTo(m)) {
      80           0 :             pdman.setSkMatrix(fInstalledTransforms[i].fHandle.toIndex(), m);
      81           0 :             fInstalledTransforms[i].fCurrentValue = m;
      82             :         }
      83           0 :         ++i;
      84           0 :     }
      85           0 :     SkASSERT(i == fInstalledTransforms.count());
      86           0 : }
      87             : 
      88           0 : void GrGLSLGeometryProcessor::setupPosition(GrGLSLVertexBuilder* vertBuilder,
      89             :                                             GrGPArgs* gpArgs,
      90             :                                             const char* posName) {
      91           0 :     gpArgs->fPositionVar.set(kVec2f_GrSLType, "pos2");
      92           0 :     vertBuilder->codeAppendf("vec2 %s = %s;", gpArgs->fPositionVar.c_str(), posName);
      93           0 : }
      94             : 
      95           0 : void GrGLSLGeometryProcessor::setupPosition(GrGLSLVertexBuilder* vertBuilder,
      96             :                                             GrGLSLUniformHandler* uniformHandler,
      97             :                                             GrGPArgs* gpArgs,
      98             :                                             const char* posName,
      99             :                                             const SkMatrix& mat,
     100             :                                             UniformHandle* viewMatrixUniform) {
     101           0 :     if (mat.isIdentity()) {
     102           0 :         gpArgs->fPositionVar.set(kVec2f_GrSLType, "pos2");
     103           0 :         vertBuilder->codeAppendf("vec2 %s = %s;", gpArgs->fPositionVar.c_str(), posName);
     104             :     } else {
     105             :         const char* viewMatrixName;
     106             :         *viewMatrixUniform = uniformHandler->addUniform(kVertex_GrShaderFlag,
     107             :                                                         kMat33f_GrSLType, kHigh_GrSLPrecision,
     108             :                                                         "uViewM",
     109           0 :                                                         &viewMatrixName);
     110           0 :         if (!mat.hasPerspective()) {
     111           0 :             gpArgs->fPositionVar.set(kVec2f_GrSLType, "pos2");
     112           0 :             vertBuilder->codeAppendf("vec2 %s = (%s * vec3(%s, 1)).xy;",
     113           0 :                                      gpArgs->fPositionVar.c_str(), viewMatrixName, posName);
     114             :         } else {
     115           0 :             gpArgs->fPositionVar.set(kVec3f_GrSLType, "pos3");
     116           0 :             vertBuilder->codeAppendf("vec3 %s = %s * vec3(%s, 1);",
     117           0 :                                      gpArgs->fPositionVar.c_str(), viewMatrixName, posName);
     118             :         }
     119             :     }
     120           0 : }

Generated by: LCOV version 1.13