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

Side by Side Diff: src/gpu/effects/GrConfigConversionEffect.cpp

Issue 1457543003: Add ShaderBuilders to EmitArgs and remove gettings from ProgBuilder. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 1 month 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
« no previous file with comments | « src/gpu/effects/GrBitmapTextGeoProc.cpp ('k') | src/gpu/effects/GrConstColorProcessor.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 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 "GrConfigConversionEffect.h" 8 #include "GrConfigConversionEffect.h"
9 #include "GrContext.h" 9 #include "GrContext.h"
10 #include "GrDrawContext.h" 10 #include "GrDrawContext.h"
(...skipping 12 matching lines...) Expand all
23 fSwapRedAndBlue = configConversionEffect.swapsRedAndBlue(); 23 fSwapRedAndBlue = configConversionEffect.swapsRedAndBlue();
24 fPMConversion = configConversionEffect.pmConversion(); 24 fPMConversion = configConversionEffect.pmConversion();
25 } 25 }
26 26
27 virtual void emitCode(EmitArgs& args) override { 27 virtual void emitCode(EmitArgs& args) override {
28 // Using highp for GLES here in order to avoid some precision issues on specific GPUs. 28 // Using highp for GLES here in order to avoid some precision issues on specific GPUs.
29 GrGLSLShaderVar tmpVar("tmpColor", kVec4f_GrSLType, 0, kHigh_GrSLPrecisi on); 29 GrGLSLShaderVar tmpVar("tmpColor", kVec4f_GrSLType, 0, kHigh_GrSLPrecisi on);
30 SkString tmpDecl; 30 SkString tmpDecl;
31 tmpVar.appendDecl(args.fBuilder->glslCaps(), &tmpDecl); 31 tmpVar.appendDecl(args.fBuilder->glslCaps(), &tmpDecl);
32 32
33 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuild er(); 33 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
34 34
35 fsBuilder->codeAppendf("%s;", tmpDecl.c_str()); 35 fragBuilder->codeAppendf("%s;", tmpDecl.c_str());
36 36
37 fsBuilder->codeAppendf("%s = ", tmpVar.c_str()); 37 fragBuilder->codeAppendf("%s = ", tmpVar.c_str());
38 fsBuilder->appendTextureLookup(args.fSamplers[0], args.fCoords[0].c_str( ), 38 fragBuilder->appendTextureLookup(args.fSamplers[0], args.fCoords[0].c_st r(),
39 args.fCoords[0].getType()); 39 args.fCoords[0].getType());
40 fsBuilder->codeAppend(";"); 40 fragBuilder->codeAppend(";");
41 41
42 if (GrConfigConversionEffect::kNone_PMConversion == fPMConversion) { 42 if (GrConfigConversionEffect::kNone_PMConversion == fPMConversion) {
43 SkASSERT(fSwapRedAndBlue); 43 SkASSERT(fSwapRedAndBlue);
44 fsBuilder->codeAppendf("%s = %s.bgra;", args.fOutputColor, tmpVar.c_ str()); 44 fragBuilder->codeAppendf("%s = %s.bgra;", args.fOutputColor, tmpVar. c_str());
45 } else { 45 } else {
46 const char* swiz = fSwapRedAndBlue ? "bgr" : "rgb"; 46 const char* swiz = fSwapRedAndBlue ? "bgr" : "rgb";
47 switch (fPMConversion) { 47 switch (fPMConversion) {
48 case GrConfigConversionEffect::kMulByAlpha_RoundUp_PMConversion: 48 case GrConfigConversionEffect::kMulByAlpha_RoundUp_PMConversion:
49 fsBuilder->codeAppendf( 49 fragBuilder->codeAppendf(
50 "%s = vec4(ceil(%s.%s * %s.a * 255.0) / 255.0, %s.a);", 50 "%s = vec4(ceil(%s.%s * %s.a * 255.0) / 255.0, %s.a);",
51 tmpVar.c_str(), tmpVar.c_str(), swiz, tmpVar.c_str(), tm pVar.c_str()); 51 tmpVar.c_str(), tmpVar.c_str(), swiz, tmpVar.c_str(), tm pVar.c_str());
52 break; 52 break;
53 case GrConfigConversionEffect::kMulByAlpha_RoundDown_PMConversio n: 53 case GrConfigConversionEffect::kMulByAlpha_RoundDown_PMConversio n:
54 // Add a compensation(0.001) here to avoid the side effect o f the floor operation. 54 // Add a compensation(0.001) here to avoid the side effect o f the floor operation.
55 // In Intel GPUs, the integer value converted from floor(%s. r * 255.0) / 255.0 55 // In Intel GPUs, the integer value converted from floor(%s. r * 255.0) / 255.0
56 // is less than the integer value converted from %s.r by 1 when the %s.r is 56 // is less than the integer value converted from %s.r by 1 when the %s.r is
57 // converted from the integer value 2^n, such as 1, 2, 4, 8, etc. 57 // converted from the integer value 2^n, such as 1, 2, 4, 8, etc.
58 fsBuilder->codeAppendf( 58 fragBuilder->codeAppendf(
59 "%s = vec4(floor(%s.%s * %s.a * 255.0 + 0.001) / 255.0, %s.a);", 59 "%s = vec4(floor(%s.%s * %s.a * 255.0 + 0.001) / 255.0, %s.a);",
60 tmpVar.c_str(), tmpVar.c_str(), swiz, tmpVar.c_str(), tm pVar.c_str()); 60 tmpVar.c_str(), tmpVar.c_str(), swiz, tmpVar.c_str(), tm pVar.c_str());
61 break; 61 break;
62 case GrConfigConversionEffect::kDivByAlpha_RoundUp_PMConversion: 62 case GrConfigConversionEffect::kDivByAlpha_RoundUp_PMConversion:
63 fsBuilder->codeAppendf( 63 fragBuilder->codeAppendf(
64 "%s = %s.a <= 0.0 ? vec4(0,0,0,0) : vec4(ceil(%s.%s / %s .a * 255.0) / 255.0, %s.a);", 64 "%s = %s.a <= 0.0 ? vec4(0,0,0,0) : vec4(ceil(%s.%s / %s .a * 255.0) / 255.0, %s.a);",
65 tmpVar.c_str(), tmpVar.c_str(), tmpVar.c_str(), swiz, tm pVar.c_str(), tmpVar.c_str()); 65 tmpVar.c_str(), tmpVar.c_str(), tmpVar.c_str(), swiz, tm pVar.c_str(), tmpVar.c_str());
66 break; 66 break;
67 case GrConfigConversionEffect::kDivByAlpha_RoundDown_PMConversio n: 67 case GrConfigConversionEffect::kDivByAlpha_RoundDown_PMConversio n:
68 fsBuilder->codeAppendf( 68 fragBuilder->codeAppendf(
69 "%s = %s.a <= 0.0 ? vec4(0,0,0,0) : vec4(floor(%s.%s / % s.a * 255.0) / 255.0, %s.a);", 69 "%s = %s.a <= 0.0 ? vec4(0,0,0,0) : vec4(floor(%s.%s / % s.a * 255.0) / 255.0, %s.a);",
70 tmpVar.c_str(), tmpVar.c_str(), tmpVar.c_str(), swiz, tm pVar.c_str(), tmpVar.c_str()); 70 tmpVar.c_str(), tmpVar.c_str(), tmpVar.c_str(), swiz, tm pVar.c_str(), tmpVar.c_str());
71 break; 71 break;
72 default: 72 default:
73 SkFAIL("Unknown conversion op."); 73 SkFAIL("Unknown conversion op.");
74 break; 74 break;
75 } 75 }
76 fsBuilder->codeAppendf("%s = %s;", args.fOutputColor, tmpVar.c_str() ); 76 fragBuilder->codeAppendf("%s = %s;", args.fOutputColor, tmpVar.c_str ());
77 } 77 }
78 SkString modulate; 78 SkString modulate;
79 GrGLSLMulVarBy4f(&modulate, args.fOutputColor, args.fInputColor); 79 GrGLSLMulVarBy4f(&modulate, args.fOutputColor, args.fInputColor);
80 fsBuilder->codeAppend(modulate.c_str()); 80 fragBuilder->codeAppend(modulate.c_str());
81 } 81 }
82 82
83 static inline void GenKey(const GrProcessor& processor, const GrGLSLCaps&, 83 static inline void GenKey(const GrProcessor& processor, const GrGLSLCaps&,
84 GrProcessorKeyBuilder* b) { 84 GrProcessorKeyBuilder* b) {
85 const GrConfigConversionEffect& conv = processor.cast<GrConfigConversion Effect>(); 85 const GrConfigConversionEffect& conv = processor.cast<GrConfigConversion Effect>();
86 uint32_t key = (conv.swapsRedAndBlue() ? 0 : 1) | (conv.pmConversion() < < 1); 86 uint32_t key = (conv.swapsRedAndBlue() ? 0 : 1) | (conv.pmConversion() < < 1);
87 b->add32(key); 87 b->add32(key);
88 } 88 }
89 89
90 private: 90 private:
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 } else { 298 } else {
299 if (kRGBA_8888_GrPixelConfig != texture->config() && 299 if (kRGBA_8888_GrPixelConfig != texture->config() &&
300 kBGRA_8888_GrPixelConfig != texture->config() && 300 kBGRA_8888_GrPixelConfig != texture->config() &&
301 kNone_PMConversion != pmConversion) { 301 kNone_PMConversion != pmConversion) {
302 // The PM conversions assume colors are 0..255 302 // The PM conversions assume colors are 0..255
303 return nullptr; 303 return nullptr;
304 } 304 }
305 return new GrConfigConversionEffect(texture, swapRedAndBlue, pmConversio n, matrix); 305 return new GrConfigConversionEffect(texture, swapRedAndBlue, pmConversio n, matrix);
306 } 306 }
307 } 307 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrBitmapTextGeoProc.cpp ('k') | src/gpu/effects/GrConstColorProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698