| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 "GrGLSLFragmentShaderBuilder.h" | 8 #include "GrGLSLFragmentShaderBuilder.h" |
| 9 #include "GrRenderTarget.h" | 9 #include "GrRenderTarget.h" |
| 10 #include "glsl/GrGLSL.h" | 10 #include "glsl/GrGLSL.h" |
| 11 #include "glsl/GrGLSLCaps.h" | 11 #include "glsl/GrGLSLCaps.h" |
| 12 #include "glsl/GrGLSLProgramBuilder.h" | 12 #include "glsl/GrGLSLProgramBuilder.h" |
| 13 #include "glsl/GrGLSLVarying.h" |
| 13 | 14 |
| 14 const char* GrGLSLFragmentShaderBuilder::kDstTextureColorName = "_dstColor"; | 15 const char* GrGLSLFragmentShaderBuilder::kDstTextureColorName = "_dstColor"; |
| 15 | 16 |
| 16 static const char* specific_layout_qualifier_name(GrBlendEquation equation) { | 17 static const char* specific_layout_qualifier_name(GrBlendEquation equation) { |
| 17 SkASSERT(GrBlendEquationIsAdvanced(equation)); | 18 SkASSERT(GrBlendEquationIsAdvanced(equation)); |
| 18 | 19 |
| 19 static const char* kLayoutQualifierNames[] = { | 20 static const char* kLayoutQualifierNames[] = { |
| 20 "blend_support_screen", | 21 "blend_support_screen", |
| 21 "blend_support_overlay", | 22 "blend_support_overlay", |
| 22 "blend_support_darken", | 23 "blend_support_darken", |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 return fHasCustomColorOutput ? DeclaredColorOutputName() : "gl_FragColor"; | 231 return fHasCustomColorOutput ? DeclaredColorOutputName() : "gl_FragColor"; |
| 231 } | 232 } |
| 232 | 233 |
| 233 const char* GrGLSLFragmentShaderBuilder::getSecondaryColorOutputName() const { | 234 const char* GrGLSLFragmentShaderBuilder::getSecondaryColorOutputName() const { |
| 234 const GrGLSLCaps& caps = *fProgramBuilder->glslCaps(); | 235 const GrGLSLCaps& caps = *fProgramBuilder->glslCaps(); |
| 235 return caps.mustDeclareFragmentShaderOutput() ? DeclaredSecondaryColorOutput
Name() | 236 return caps.mustDeclareFragmentShaderOutput() ? DeclaredSecondaryColorOutput
Name() |
| 236 : "gl_SecondaryFragColorEXT"; | 237 : "gl_SecondaryFragColorEXT"; |
| 237 } | 238 } |
| 238 | 239 |
| 239 void GrGLSLFragmentShaderBuilder::onFinalize() { | 240 void GrGLSLFragmentShaderBuilder::onFinalize() { |
| 241 fProgramBuilder->varyingHandler()->getFragDecls(&this->inputs(), &this->outp
uts()); |
| 240 GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, | 242 GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, |
| 241 *fProgramBuilder->glslCaps(), | 243 *fProgramBuilder->glslCaps(), |
| 242 &this->precisionQualifier()); | 244 &this->precisionQualifier()); |
| 243 } | 245 } |
| 244 | 246 |
| 245 void GrGLSLFragmentShaderBuilder::addVarying(GrGLSLVarying* v, GrSLPrecision fsP
rec) { | |
| 246 v->fFsIn = v->fVsOut; | |
| 247 if (v->fGsOut) { | |
| 248 v->fFsIn = v->fGsOut; | |
| 249 } | |
| 250 fInputs.push_back().set(v->fType, GrGLSLShaderVar::kVaryingIn_TypeModifier,
v->fFsIn, fsPrec); | |
| 251 } | |
| 252 | |
| 253 void GrGLSLFragmentBuilder::onBeforeChildProcEmitCode() { | 247 void GrGLSLFragmentBuilder::onBeforeChildProcEmitCode() { |
| 254 SkASSERT(fSubstageIndices.count() >= 1); | 248 SkASSERT(fSubstageIndices.count() >= 1); |
| 255 fSubstageIndices.push_back(0); | 249 fSubstageIndices.push_back(0); |
| 256 // second-to-last value in the fSubstageIndices stack is the index of the ch
ild proc | 250 // second-to-last value in the fSubstageIndices stack is the index of the ch
ild proc |
| 257 // at that level which is currently emitting code. | 251 // at that level which is currently emitting code. |
| 258 fMangleString.appendf("_c%d", fSubstageIndices[fSubstageIndices.count() - 2]
); | 252 fMangleString.appendf("_c%d", fSubstageIndices[fSubstageIndices.count() - 2]
); |
| 259 } | 253 } |
| 260 | 254 |
| 261 void GrGLSLFragmentBuilder::onAfterChildProcEmitCode() { | 255 void GrGLSLFragmentBuilder::onAfterChildProcEmitCode() { |
| 262 SkASSERT(fSubstageIndices.count() >= 2); | 256 SkASSERT(fSubstageIndices.count() >= 2); |
| 263 fSubstageIndices.pop_back(); | 257 fSubstageIndices.pop_back(); |
| 264 fSubstageIndices.back()++; | 258 fSubstageIndices.back()++; |
| 265 int removeAt = fMangleString.findLastOf('_'); | 259 int removeAt = fMangleString.findLastOf('_'); |
| 266 fMangleString.remove(removeAt, fMangleString.size() - removeAt); | 260 fMangleString.remove(removeAt, fMangleString.size() - removeAt); |
| 267 } | 261 } |
| 268 | 262 |
| OLD | NEW |