 Chromium Code Reviews
 Chromium Code Reviews Issue 23537028:
  Enable vertexless shading when path rendering is supported  (Closed) 
  Base URL: https://skia.googlecode.com/svn/trunk
    
  
    Issue 23537028:
  Enable vertexless shading when path rendering is supported  (Closed) 
  Base URL: https://skia.googlecode.com/svn/trunk| Index: src/gpu/gl/GrGLShaderBuilder.cpp | 
| diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp | 
| index f73520c363f268a7666689d2a4b26404afbcaea0..0d09606ddcfbbb7d9bdc351ecd4a817c1a71a2e4 100644 | 
| --- a/src/gpu/gl/GrGLShaderBuilder.cpp | 
| +++ b/src/gpu/gl/GrGLShaderBuilder.cpp | 
| @@ -102,12 +102,21 @@ GrGLShaderBuilder::GrGLShaderBuilder(const GrGLContextInfo& ctxInfo, | 
| , fFSInputs(kVarsPerBlock) | 
| , fFSOutputs(kMaxFSOutputs) | 
| , fSetupFragPosition(false) | 
| - , fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFragPosKey) { | 
| + , fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFragPosKey) | 
| + , fNumTexGenUnits(0) { | 
| const GrGLProgramDesc::KeyHeader& header = desc.getHeader(); | 
| - // TODO: go vertexless when possible. | 
| - fVertexBuilder.reset(SkNEW_ARGS(VertexBuilder, (this, desc))); | 
| + // We only go without a vertex shader if every effect supports vertexless mode, the context | 
| + // has fixed function/path rendering support, and position is the only vertex attribute. | 
| + if (hasVertexShaderEffects || | 
| + !ctxInfo.caps()->fixedFunctionSupport() || | 
| + !ctxInfo.caps()->pathStencilingSupport() || | 
| + -1 != header.fLocalCoordAttributeIndex || | 
| + -1 != header.fColorAttributeIndex || | 
| + -1 != header.fCoverageAttributeIndex) { | 
| + fVertexBuilder.reset(SkNEW_ARGS(VertexBuilder, (this, desc))); | 
| + } | 
| // Emit code to read the dst copy textue if necessary. | 
| if (kNoDstRead_DstReadKey != header.fDstReadKey && | 
| @@ -434,6 +443,23 @@ void GrGLShaderBuilder::fsEmitFunction(GrSLType returnType, | 
| fFSFunctions.append("}\n\n"); | 
| } | 
| +void GrGLShaderBuilder::addTexGenUnit(GrSLType type, | 
| + SkString* fsInName, | 
| + int* unitIdx, | 
| + int* numComponents) | 
| +{ | 
| 
bsalomon
2013/09/10 13:51:06
style nit: { up on prev line
 | 
| + const int index = fNumTexGenUnits++; | 
| + if (fsInName) { | 
| + fsInName->printf("%s(gl_TexCoord[%u])", GrGLSLTypeString(type), index); | 
| + } | 
| + if (unitIdx) { | 
| + *unitIdx = index; | 
| + } | 
| + if (numComponents) { | 
| + *numComponents = GrSLTypeToVecLength(type); | 
| + } | 
| +} | 
| + | 
| namespace { | 
| inline void append_default_precision_qualifier(GrGLShaderVar::Precision p, |