Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp

Issue 764643004: Create xfer processor backend. (Closed) Base URL: https://skia.googlesource.com/skia.git@xferBlendSolo
Patch Set: Blend off ODS and only on XP Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "GrGLFragmentShaderBuilder.h" 8 #include "GrGLFragmentShaderBuilder.h"
9 #include "GrGLShaderStringBuilder.h" 9 #include "GrGLShaderStringBuilder.h"
10 #include "GrGLProgramBuilder.h" 10 #include "GrGLProgramBuilder.h"
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } 249 }
250 250
251 const char* GrGLFragmentShaderBuilder::getPrimaryColorOutputName() const { 251 const char* GrGLFragmentShaderBuilder::getPrimaryColorOutputName() const {
252 return fHasCustomColorOutput ? declared_color_output_name() : "gl_FragColor" ; 252 return fHasCustomColorOutput ? declared_color_output_name() : "gl_FragColor" ;
253 } 253 }
254 254
255 const char* GrGLFragmentShaderBuilder::getSecondaryColorOutputName() const { 255 const char* GrGLFragmentShaderBuilder::getSecondaryColorOutputName() const {
256 return dual_source_output_name(); 256 return dual_source_output_name();
257 } 257 }
258 258
259 void GrGLFragmentShaderBuilder::enableSecondaryOutput(const GrGLSLExpr4& inputCo lor,
260 const GrGLSLExpr4& inputCo verage) {
261 this->enableSecondaryOutput();
262 const char* secondaryOutputName = this->getSecondaryColorOutputName();
263 GrGLSLExpr4 coeff(1);
264 switch (fProgramBuilder->header().fSecondaryOutputType) {
265 case GrProgramDesc::kCoverage_SecondaryOutputType:
266 break;
267 case GrProgramDesc::kCoverageISA_SecondaryOutputType:
268 // Get (1-A) into coeff
269 coeff = GrGLSLExpr4::VectorCast(GrGLSLExpr1(1) - inputColor.a());
270 break;
271 case GrProgramDesc::kCoverageISC_SecondaryOutputType:
272 // Get (1-RGBA) into coeff
273 coeff = GrGLSLExpr4(1) - inputColor;
274 break;
275 default:
276 SkFAIL("Unexpected Secondary Output");
277 }
278 // Get coeff * coverage into modulate and then write that to the dual source output.
279 this->codeAppendf("\t%s = %s;\n", secondaryOutputName, (coeff * inputCoverag e).c_str());
280 }
281
282 void GrGLFragmentShaderBuilder::combineColorAndCoverage(const GrGLSLExpr4& input Color,
283 const GrGLSLExpr4& input Coverage) {
284 GrGLSLExpr4 fragColor = inputColor * inputCoverage;
285 switch (fProgramBuilder->header().fPrimaryOutputType) {
286 case GrProgramDesc::kModulate_PrimaryOutputType:
287 break;
288 case GrProgramDesc::kCombineWithDst_PrimaryOutputType:
289 {
290 // Tack on "+(1-coverage)dst onto the frag color.
291 GrGLSLExpr4 dstCoeff = GrGLSLExpr4(1) - inputCoverage;
292 GrGLSLExpr4 dstContribution = dstCoeff * GrGLSLExpr4(this->dstCo lor());
293 fragColor = fragColor + dstContribution;
294 }
295 break;
296 default:
297 SkFAIL("Unknown Primary Output");
298 }
299
300 // On any post 1.10 GLSL supporting GPU, we declare custom output
301 if (k110_GrGLSLGeneration != fProgramBuilder->gpu()->glslGeneration()) {
302 this->enableCustomOutput();
303 }
304
305 this->codeAppendf("\t%s = %s;\n", this->getPrimaryColorOutputName(), fragCol or.c_str());
306 }
307
308 bool GrGLFragmentShaderBuilder::compileAndAttachShaders(GrGLuint programId, 259 bool GrGLFragmentShaderBuilder::compileAndAttachShaders(GrGLuint programId,
309 SkTDArray<GrGLuint>* sha derIds) const { 260 SkTDArray<GrGLuint>* sha derIds) const {
310 GrGpuGL* gpu = fProgramBuilder->gpu(); 261 GrGpuGL* gpu = fProgramBuilder->gpu();
311 SkString fragShaderSrc(GrGetGLSLVersionDecl(gpu->ctxInfo())); 262 SkString fragShaderSrc(GrGetGLSLVersionDecl(gpu->ctxInfo()));
312 fragShaderSrc.append(fExtensions); 263 fragShaderSrc.append(fExtensions);
313 append_default_precision_qualifier(kDefault_GrSLPrecision, 264 append_default_precision_qualifier(kDefault_GrSLPrecision,
314 gpu->glStandard(), 265 gpu->glStandard(),
315 &fragShaderSrc); 266 &fragShaderSrc);
316 fProgramBuilder->appendUniformDecls(GrGLProgramBuilder::kFragment_Visibility , &fragShaderSrc); 267 fProgramBuilder->appendUniformDecls(GrGLProgramBuilder::kFragment_Visibility , &fragShaderSrc);
317 this->appendDecls(fInputs, &fragShaderSrc); 268 this->appendDecls(fInputs, &fragShaderSrc);
(...skipping 28 matching lines...) Expand all
346 } 297 }
347 } 298 }
348 299
349 void GrGLFragmentShaderBuilder::addVarying(GrGLVarying* v, GrSLPrecision fsPrec) { 300 void GrGLFragmentShaderBuilder::addVarying(GrGLVarying* v, GrSLPrecision fsPrec) {
350 v->fFsIn = v->fVsOut; 301 v->fFsIn = v->fVsOut;
351 if (v->fGsOut) { 302 if (v->fGsOut) {
352 v->fFsIn = v->fGsOut; 303 v->fFsIn = v->fGsOut;
353 } 304 }
354 fInputs.push_back().set(v->fType, GrGLShaderVar::kVaryingIn_TypeModifier, v- >fFsIn, fsPrec); 305 fInputs.push_back().set(v->fType, GrGLShaderVar::kVaryingIn_TypeModifier, v- >fFsIn, fsPrec);
355 } 306 }
OLDNEW
« no previous file with comments | « src/gpu/gl/builders/GrGLFragmentShaderBuilder.h ('k') | src/gpu/gl/builders/GrGLLegacyNvprProgramBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698