| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2015 Google Inc. | 2  * Copyright 2015 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "glsl/GrGLSLProgramBuilder.h" | 8 #include "glsl/GrGLSLProgramBuilder.h" | 
| 9 | 9 | 
| 10 #include "GrPipeline.h" | 10 #include "GrPipeline.h" | 
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 92                                            proc, | 92                                            proc, | 
| 93                                            outputColor->c_str(), | 93                                            outputColor->c_str(), | 
| 94                                            outputCoverage->c_str(), | 94                                            outputCoverage->c_str(), | 
| 95                                            samplers, | 95                                            samplers, | 
| 96                                            fCoordTransforms, | 96                                            fCoordTransforms, | 
| 97                                            &fOutCoords); | 97                                            &fOutCoords); | 
| 98     fGeometryProcessor->emitCode(args); | 98     fGeometryProcessor->emitCode(args); | 
| 99 | 99 | 
| 100     // We have to check that effects and the code they emit are consistent, ie i
     f an effect | 100     // We have to check that effects and the code they emit are consistent, ie i
     f an effect | 
| 101     // asks for dst color, then the emit code needs to follow suit | 101     // asks for dst color, then the emit code needs to follow suit | 
| 102     verify(proc); | 102     SkDEBUGCODE(verify(proc);) | 
| 103 | 103 | 
| 104     fFS.codeAppend("}"); | 104     fFS.codeAppend("}"); | 
| 105 } | 105 } | 
| 106 | 106 | 
| 107 void GrGLSLProgramBuilder::emitAndInstallFragProcs(int procOffset, | 107 void GrGLSLProgramBuilder::emitAndInstallFragProcs(int procOffset, | 
| 108                                                    int numProcs, | 108                                                    int numProcs, | 
| 109                                                    GrGLSLExpr4* inOut) { | 109                                                    GrGLSLExpr4* inOut) { | 
| 110     for (int i = procOffset; i < numProcs; ++i) { | 110     for (int i = procOffset; i < numProcs; ++i) { | 
| 111         GrGLSLExpr4 output; | 111         GrGLSLExpr4 output; | 
| 112         const GrFragmentProcessor& fp = this->pipeline().getFragmentProcessor(i)
     ; | 112         const GrFragmentProcessor& fp = this->pipeline().getFragmentProcessor(i)
     ; | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 140                                            this->glslCaps(), | 140                                            this->glslCaps(), | 
| 141                                            fp, | 141                                            fp, | 
| 142                                            output->c_str(), | 142                                            output->c_str(), | 
| 143                                            input.isOnes() ? nullptr : input.c_st
     r(), | 143                                            input.isOnes() ? nullptr : input.c_st
     r(), | 
| 144                                            fOutCoords[index], | 144                                            fOutCoords[index], | 
| 145                                            samplers); | 145                                            samplers); | 
| 146     fragProc->emitCode(args); | 146     fragProc->emitCode(args); | 
| 147 | 147 | 
| 148     // We have to check that effects and the code they emit are consistent, ie i
     f an effect | 148     // We have to check that effects and the code they emit are consistent, ie i
     f an effect | 
| 149     // asks for dst color, then the emit code needs to follow suit | 149     // asks for dst color, then the emit code needs to follow suit | 
| 150     verify(fp); | 150     SkDEBUGCODE(verify(fp);) | 
| 151     fFragmentProcessors.push_back(fragProc); | 151     fFragmentProcessors.push_back(fragProc); | 
| 152 | 152 | 
| 153     fFS.codeAppend("}"); | 153     fFS.codeAppend("}"); | 
| 154 } | 154 } | 
| 155 | 155 | 
| 156 void GrGLSLProgramBuilder::emitAndInstallXferProc(const GrXferProcessor& xp, | 156 void GrGLSLProgramBuilder::emitAndInstallXferProc(const GrXferProcessor& xp, | 
| 157                                                   const GrGLSLExpr4& colorIn, | 157                                                   const GrGLSLExpr4& colorIn, | 
| 158                                                   const GrGLSLExpr4& coverageIn, | 158                                                   const GrGLSLExpr4& coverageIn, | 
| 159                                                   bool ignoresCoverage, | 159                                                   bool ignoresCoverage, | 
| 160                                                   GrPixelLocalStorageState plsSt
     ate) { | 160                                                   GrPixelLocalStorageState plsSt
     ate) { | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 187                                        xp, colorIn.c_str(), | 187                                        xp, colorIn.c_str(), | 
| 188                                        ignoresCoverage ? nullptr : coverageIn.c_
     str(), | 188                                        ignoresCoverage ? nullptr : coverageIn.c_
     str(), | 
| 189                                        fFS.getPrimaryColorOutputName(), | 189                                        fFS.getPrimaryColorOutputName(), | 
| 190                                        fFS.getSecondaryColorOutputName(), | 190                                        fFS.getSecondaryColorOutputName(), | 
| 191                                        samplers, | 191                                        samplers, | 
| 192                                        usePLSDstRead); | 192                                        usePLSDstRead); | 
| 193     fXferProcessor->emitCode(args); | 193     fXferProcessor->emitCode(args); | 
| 194 | 194 | 
| 195     // We have to check that effects and the code they emit are consistent, ie i
     f an effect | 195     // We have to check that effects and the code they emit are consistent, ie i
     f an effect | 
| 196     // asks for dst color, then the emit code needs to follow suit | 196     // asks for dst color, then the emit code needs to follow suit | 
| 197     verify(xp); | 197     SkDEBUGCODE(verify(xp);) | 
| 198     fFS.codeAppend("}"); | 198     fFS.codeAppend("}"); | 
| 199 } | 199 } | 
| 200 | 200 | 
| 201 void GrGLSLProgramBuilder::emitFSOutputSwizzle(bool hasSecondaryOutput) { | 201 void GrGLSLProgramBuilder::emitFSOutputSwizzle(bool hasSecondaryOutput) { | 
| 202     // Swizzle the fragment shader outputs if necessary. | 202     // Swizzle the fragment shader outputs if necessary. | 
| 203     GrSwizzle swizzle; | 203     GrSwizzle swizzle; | 
| 204     swizzle.setFromKey(this->desc().header().fOutputSwizzle); | 204     swizzle.setFromKey(this->desc().header().fOutputSwizzle); | 
| 205     if (swizzle != GrSwizzle::RGBA()) { | 205     if (swizzle != GrSwizzle::RGBA()) { | 
| 206         fFS.codeAppendf("%s = %s.%s;", fFS.getPrimaryColorOutputName(), | 206         fFS.codeAppendf("%s = %s.%s;", fFS.getPrimaryColorOutputName(), | 
| 207                         fFS.getPrimaryColorOutputName(), | 207                         fFS.getPrimaryColorOutputName(), | 
| 208                         swizzle.c_str()); | 208                         swizzle.c_str()); | 
| 209         if (hasSecondaryOutput) { | 209         if (hasSecondaryOutput) { | 
| 210             fFS.codeAppendf("%s = %s.%s;", fFS.getSecondaryColorOutputName(), | 210             fFS.codeAppendf("%s = %s.%s;", fFS.getSecondaryColorOutputName(), | 
| 211                             fFS.getSecondaryColorOutputName(), | 211                             fFS.getSecondaryColorOutputName(), | 
| 212                             swizzle.c_str()); | 212                             swizzle.c_str()); | 
| 213         } | 213         } | 
| 214     } | 214     } | 
| 215 } | 215 } | 
| 216 | 216 | 
|  | 217 #ifdef SK_DEBUG | 
| 217 void GrGLSLProgramBuilder::verify(const GrPrimitiveProcessor& gp) { | 218 void GrGLSLProgramBuilder::verify(const GrPrimitiveProcessor& gp) { | 
| 218     SkASSERT(fFS.hasReadFragmentPosition() == gp.willReadFragmentPosition()); | 219     SkASSERT(fFS.usedProcessorFeatures() == gp.requiredFeatures()); | 
| 219 } | 220 } | 
| 220 | 221 | 
| 221 void GrGLSLProgramBuilder::verify(const GrXferProcessor& xp) { | 222 void GrGLSLProgramBuilder::verify(const GrXferProcessor& xp) { | 
|  | 223     SkASSERT(fFS.usedProcessorFeatures() == xp.requiredFeatures()); | 
| 222     SkASSERT(fFS.hasReadDstColor() == xp.willReadDstColor()); | 224     SkASSERT(fFS.hasReadDstColor() == xp.willReadDstColor()); | 
| 223 } | 225 } | 
| 224 | 226 | 
| 225 void GrGLSLProgramBuilder::verify(const GrFragmentProcessor& fp) { | 227 void GrGLSLProgramBuilder::verify(const GrFragmentProcessor& fp) { | 
| 226     SkASSERT(fFS.hasReadFragmentPosition() == fp.willReadFragmentPosition()); | 228     SkASSERT(fFS.usedProcessorFeatures() == fp.requiredFeatures()); | 
| 227 } | 229 } | 
|  | 230 #endif | 
| 228 | 231 | 
| 229 void GrGLSLProgramBuilder::nameVariable(SkString* out, char prefix, const char* 
     name, bool mangle) { | 232 void GrGLSLProgramBuilder::nameVariable(SkString* out, char prefix, const char* 
     name, bool mangle) { | 
| 230     if ('\0' == prefix) { | 233     if ('\0' == prefix) { | 
| 231         *out = name; | 234         *out = name; | 
| 232     } else { | 235     } else { | 
| 233         out->printf("%c%s", prefix, name); | 236         out->printf("%c%s", prefix, name); | 
| 234     } | 237     } | 
| 235     if (mangle) { | 238     if (mangle) { | 
| 236         if (out->endsWith('_')) { | 239         if (out->endsWith('_')) { | 
| 237             // Names containing "__" are reserved. | 240             // Names containing "__" are reserved. | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 285         delete fFragmentProcessors[i]; | 288         delete fFragmentProcessors[i]; | 
| 286     } | 289     } | 
| 287 } | 290 } | 
| 288 | 291 | 
| 289 void GrGLSLProgramBuilder::finalizeShaders() { | 292 void GrGLSLProgramBuilder::finalizeShaders() { | 
| 290     this->varyingHandler()->finalize(); | 293     this->varyingHandler()->finalize(); | 
| 291     fVS.finalize(kVertex_GrShaderFlag); | 294     fVS.finalize(kVertex_GrShaderFlag); | 
| 292     fFS.finalize(kFragment_GrShaderFlag); | 295     fFS.finalize(kFragment_GrShaderFlag); | 
| 293 | 296 | 
| 294 } | 297 } | 
| OLD | NEW | 
|---|