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

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

Issue 1684063006: Add GrShaderFlags enum (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Bit->Flag Created 4 years, 10 months 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/GrTextureDomain.cpp ('k') | src/gpu/gl/GrGLProgramDataManager.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 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 "GrYUVEffect.h" 8 #include "GrYUVEffect.h"
9 9
10 #include "GrCoordTransform.h" 10 #include "GrCoordTransform.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 95
96 class GLSLProcessor : public GrGLSLFragmentProcessor { 96 class GLSLProcessor : public GrGLSLFragmentProcessor {
97 public: 97 public:
98 // this class always generates the same code. 98 // this class always generates the same code.
99 static void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKey Builder*) {} 99 static void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKey Builder*) {}
100 100
101 void emitCode(EmitArgs& args) override { 101 void emitCode(EmitArgs& args) override {
102 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; 102 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
103 103
104 const char* colorSpaceMatrix = nullptr; 104 const char* colorSpaceMatrix = nullptr;
105 fMatrixUni = args.fUniformHandler->addUniform( 105 fMatrixUni = args.fUniformHandler->addUniform(kFragment_GrShaderFlag ,
106 GrGLSLUniformHandler::k Fragment_Visibility, 106 kMat44f_GrSLType, kDef ault_GrSLPrecision,
107 kMat44f_GrSLType, kDefa ult_GrSLPrecision, 107 "ColorSpaceMatrix", &c olorSpaceMatrix);
108 "ColorSpaceMatrix", &co lorSpaceMatrix);
109 fragBuilder->codeAppendf("%s = vec4(", args.fOutputColor); 108 fragBuilder->codeAppendf("%s = vec4(", args.fOutputColor);
110 fragBuilder->appendTextureLookup(args.fSamplers[0], args.fCoords[0]. c_str(), 109 fragBuilder->appendTextureLookup(args.fSamplers[0], args.fCoords[0]. c_str(),
111 args.fCoords[0].getType()); 110 args.fCoords[0].getType());
112 fragBuilder->codeAppend(".r,"); 111 fragBuilder->codeAppend(".r,");
113 fragBuilder->appendTextureLookup(args.fSamplers[1], args.fCoords[1]. c_str(), 112 fragBuilder->appendTextureLookup(args.fSamplers[1], args.fCoords[1]. c_str(),
114 args.fCoords[1].getType()); 113 args.fCoords[1].getType());
115 fragBuilder->codeAppend(".r,"); 114 fragBuilder->codeAppend(".r,");
116 fragBuilder->appendTextureLookup(args.fSamplers[2], args.fCoords[2]. c_str(), 115 fragBuilder->appendTextureLookup(args.fSamplers[2], args.fCoords[2]. c_str(),
117 args.fCoords[2].getType()); 116 args.fCoords[2].getType());
118 fragBuilder->codeAppendf(".r, 1.0) * %s;", colorSpaceMatrix); 117 fragBuilder->codeAppendf(".r, 1.0) * %s;", colorSpaceMatrix);
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; 228 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
230 OutputChannels oc = args.fFp.cast<RGBToYUVEffect>().outputChannels() ; 229 OutputChannels oc = args.fFp.cast<RGBToYUVEffect>().outputChannels() ;
231 230
232 SkString outputColor("rgbColor"); 231 SkString outputColor("rgbColor");
233 this->emitChild(0, args.fInputColor, &outputColor, args); 232 this->emitChild(0, args.fInputColor, &outputColor, args);
234 233
235 const char* uniName; 234 const char* uniName;
236 switch (oc) { 235 switch (oc) {
237 case kYUV_OutputChannels: 236 case kYUV_OutputChannels:
238 fRGBToYUVUni = args.fUniformHandler->addUniformArray( 237 fRGBToYUVUni = args.fUniformHandler->addUniformArray(
239 GrGLSLUniformHandler::kFragment_Visibility, 238 kFragment_GrShaderFlag,
240 kVec4f_GrSLType, kDefault_GrSLPrecision, 239 kVec4f_GrSLType, kDefault_GrSLPrecision,
241 "RGBToYUV", 3, &uniName); 240 "RGBToYUV", 3, &uniName);
242 fragBuilder->codeAppendf("%s = vec4(dot(rgbColor.rgb, %s[0]. rgb) + %s[0].a," 241 fragBuilder->codeAppendf("%s = vec4(dot(rgbColor.rgb, %s[0]. rgb) + %s[0].a,"
243 "dot(rgbColor.rgb, %s[1]. rgb) + %s[1].a," 242 "dot(rgbColor.rgb, %s[1]. rgb) + %s[1].a,"
244 "dot(rgbColor.rgb, %s[2]. rgb) + %s[2].a," 243 "dot(rgbColor.rgb, %s[2]. rgb) + %s[2].a,"
245 "rgbColor.a);", 244 "rgbColor.a);",
246 args.fOutputColor, uniName, uniName , uniName, uniName, 245 args.fOutputColor, uniName, uniName , uniName, uniName,
247 uniName, uniName); 246 uniName, uniName);
248 break; 247 break;
249 case kUV_OutputChannels: 248 case kUV_OutputChannels:
250 fRGBToYUVUni = args.fUniformHandler->addUniformArray( 249 fRGBToYUVUni = args.fUniformHandler->addUniformArray(
251 GrGLSLUniformHandler::kFragment_Visibility, 250 kFragment_GrShaderFlag,
252 kVec4f_GrSLType, kDefault_GrSLPrecision, 251 kVec4f_GrSLType, kDefault_GrSLPrecision,
253 "RGBToUV", 2, &uniName); 252 "RGBToUV", 2, &uniName);
254 fragBuilder->codeAppendf("%s = vec4(dot(rgbColor.rgb, %s[0]. rgb) + %s[0].a," 253 fragBuilder->codeAppendf("%s = vec4(dot(rgbColor.rgb, %s[0]. rgb) + %s[0].a,"
255 "dot(rgbColor.rgb, %s[1]. rgb) + %s[1].a," 254 "dot(rgbColor.rgb, %s[1]. rgb) + %s[1].a,"
256 "0.0," 255 "0.0,"
257 "rgbColor.a);", 256 "rgbColor.a);",
258 args.fOutputColor, uniName, uniName , uniName, uniName); 257 args.fOutputColor, uniName, uniName , uniName, uniName);
259 break; 258 break;
260 case kY_OutputChannels: 259 case kY_OutputChannels:
261 case kU_OutputChannels: 260 case kU_OutputChannels:
262 case kV_OutputChannels: 261 case kV_OutputChannels:
263 fRGBToYUVUni = args.fUniformHandler->addUniform( 262 fRGBToYUVUni = args.fUniformHandler->addUniform(
264 GrGLSLUniformHandler::kFragment_Visibility, 263 kFragment_GrShaderFlag,
265 kVec4f_GrSLType, kDefault_GrSLPrecision, 264 kVec4f_GrSLType, kDefault_GrSLPrecision,
266 "RGBToYUorV", &uniName); 265 "RGBToYUorV", &uniName);
267 fragBuilder->codeAppendf("%s = vec4(dot(rgbColor.rgb, %s.rgb ) + %s.a);\n", 266 fragBuilder->codeAppendf("%s = vec4(dot(rgbColor.rgb, %s.rgb ) + %s.a);\n",
268 args.fOutputColor, uniName, uniName ); 267 args.fOutputColor, uniName, uniName );
269 break; 268 break;
270 } 269 }
271 } 270 }
272 271
273 private: 272 private:
274 void onSetData(const GrGLSLProgramDataManager& pdman, 273 void onSetData(const GrGLSLProgramDataManager& pdman,
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 GrYUVEffect::CreateRGBToU(const GrFragmentProcessor* rgbFP, SkYUVColorSpace colo rSpace) { 379 GrYUVEffect::CreateRGBToU(const GrFragmentProcessor* rgbFP, SkYUVColorSpace colo rSpace) {
381 SkASSERT(rgbFP); 380 SkASSERT(rgbFP);
382 return new RGBToYUVEffect(rgbFP, colorSpace, RGBToYUVEffect::kU_OutputChanne ls); 381 return new RGBToYUVEffect(rgbFP, colorSpace, RGBToYUVEffect::kU_OutputChanne ls);
383 } 382 }
384 383
385 const GrFragmentProcessor* 384 const GrFragmentProcessor*
386 GrYUVEffect::CreateRGBToV(const GrFragmentProcessor* rgbFP, SkYUVColorSpace colo rSpace) { 385 GrYUVEffect::CreateRGBToV(const GrFragmentProcessor* rgbFP, SkYUVColorSpace colo rSpace) {
387 SkASSERT(rgbFP); 386 SkASSERT(rgbFP);
388 return new RGBToYUVEffect(rgbFP, colorSpace, RGBToYUVEffect::kV_OutputChanne ls); 387 return new RGBToYUVEffect(rgbFP, colorSpace, RGBToYUVEffect::kV_OutputChanne ls);
389 } 388 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrTextureDomain.cpp ('k') | src/gpu/gl/GrGLProgramDataManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698