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

Side by Side Diff: experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp

Issue 1438003003: Move all ShaderBuilder files to GLSL (Closed) Base URL: https://skia.googlesource.com/skia.git@glslProgBuild
Patch Set: nits 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 | « no previous file | gm/dcshader.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 2013 Google Inc. 2 * Copyright 2013 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 "SkDither.h" 8 #include "SkDither.h"
9 #include "SkPerlinNoiseShader2.h" 9 #include "SkPerlinNoiseShader2.h"
10 #include "SkColorFilter.h" 10 #include "SkColorFilter.h"
11 #include "SkReadBuffer.h" 11 #include "SkReadBuffer.h"
12 #include "SkWriteBuffer.h" 12 #include "SkWriteBuffer.h"
13 #include "SkShader.h" 13 #include "SkShader.h"
14 #include "SkUnPreMultiply.h" 14 #include "SkUnPreMultiply.h"
15 #include "SkString.h" 15 #include "SkString.h"
16 16
17 #if SK_SUPPORT_GPU 17 #if SK_SUPPORT_GPU
18 #include "GrContext.h" 18 #include "GrContext.h"
19 #include "GrCoordTransform.h" 19 #include "GrCoordTransform.h"
20 #include "GrInvariantOutput.h" 20 #include "GrInvariantOutput.h"
21 #include "SkGr.h" 21 #include "SkGr.h"
22 #include "effects/GrConstColorProcessor.h" 22 #include "effects/GrConstColorProcessor.h"
23 #include "gl/GrGLFragmentProcessor.h" 23 #include "gl/GrGLFragmentProcessor.h"
24 #include "gl/builders/GrGLProgramBuilder.h" 24 #include "glsl/GrGLSLFragmentShaderBuilder.h"
25 #include "glsl/GrGLSLProgramBuilder.h"
25 #include "glsl/GrGLSLProgramDataManager.h" 26 #include "glsl/GrGLSLProgramDataManager.h"
26 #endif 27 #endif
27 28
28 static const int kBlockSize = 256; 29 static const int kBlockSize = 256;
29 static const int kBlockMask = kBlockSize - 1; 30 static const int kBlockMask = kBlockSize - 1;
30 static const int kPerlinNoise = 4096; 31 static const int kPerlinNoise = 4096;
31 static const int kRandMaximum = SK_MaxS32; // 2**31 - 1 32 static const int kRandMaximum = SK_MaxS32; // 2**31 - 1
32 33
33 static uint8_t improved_noise_permutations[] = { 34 static uint8_t improved_noise_permutations[] = {
34 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 2 25, 140, 36, 103, 35 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 2 25, 140, 36, 103,
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 kNone_SkFilterQuality); 750 kNone_SkFilterQuality);
750 } 751 }
751 752
752 GrGLPerlinNoise2::GrGLPerlinNoise2(const GrProcessor& processor) 753 GrGLPerlinNoise2::GrGLPerlinNoise2(const GrProcessor& processor)
753 : fType(processor.cast<GrPerlinNoise2Effect>().type()) 754 : fType(processor.cast<GrPerlinNoise2Effect>().type())
754 , fStitchTiles(processor.cast<GrPerlinNoise2Effect>().stitchTiles()) 755 , fStitchTiles(processor.cast<GrPerlinNoise2Effect>().stitchTiles())
755 , fNumOctaves(processor.cast<GrPerlinNoise2Effect>().numOctaves()) { 756 , fNumOctaves(processor.cast<GrPerlinNoise2Effect>().numOctaves()) {
756 } 757 }
757 758
758 void GrGLPerlinNoise2::emitCode(EmitArgs& args) { 759 void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
759 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); 760 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder() ;
760 SkString vCoords = fsBuilder->ensureFSCoords2D(args.fCoords, 0); 761 SkString vCoords = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
761 762
762 fBaseFrequencyUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_ Visibility, 763 fBaseFrequencyUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragmen t_Visibility,
763 kVec2f_GrSLType, kDefault_GrSLPrecis ion, 764 kVec2f_GrSLType, kDefault_GrSLPrecis ion,
764 "baseFrequency"); 765 "baseFrequency");
765 const char* baseFrequencyUni = args.fBuilder->getUniformCStr(fBaseFrequencyU ni); 766 const char* baseFrequencyUni = args.fBuilder->getUniformCStr(fBaseFrequencyU ni);
766 767
767 const char* stitchDataUni = nullptr; 768 const char* stitchDataUni = nullptr;
768 if (fStitchTiles) { 769 if (fStitchTiles) {
769 fStitchDataUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment _Visibility, 770 fStitchDataUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragme nt_Visibility,
770 kVec2f_GrSLType, kDefault_GrSLPreci sion, 771 kVec2f_GrSLType, kDefault_GrSLPreci sion,
771 "stitchData"); 772 "stitchData");
772 stitchDataUni = args.fBuilder->getUniformCStr(fStitchDataUni); 773 stitchDataUni = args.fBuilder->getUniformCStr(fStitchDataUni);
773 } 774 }
774 775
775 // There are 4 lines, so the center of each line is 1/8, 3/8, 5/8 and 7/8 776 // There are 4 lines, so the center of each line is 1/8, 3/8, 5/8 and 7/8
776 const char* chanCoordR = "0.125"; 777 const char* chanCoordR = "0.125";
777 const char* chanCoordG = "0.375"; 778 const char* chanCoordG = "0.375";
778 const char* chanCoordB = "0.625"; 779 const char* chanCoordB = "0.625";
779 const char* chanCoordA = "0.875"; 780 const char* chanCoordA = "0.875";
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 // Clamp values 999 // Clamp values
999 fsBuilder->codeAppendf("\n\t\t%s = clamp(%s, 0.0, 1.0);", args.fOutputColor, args.fOutputColor); 1000 fsBuilder->codeAppendf("\n\t\t%s = clamp(%s, 0.0, 1.0);", args.fOutputColor, args.fOutputColor);
1000 1001
1001 // Pre-multiply the result 1002 // Pre-multiply the result
1002 fsBuilder->codeAppendf("\n\t\t%s = vec4(%s.rgb * %s.aaa, %s.a);\n", 1003 fsBuilder->codeAppendf("\n\t\t%s = vec4(%s.rgb * %s.aaa, %s.a);\n",
1003 args.fOutputColor, args.fOutputColor, 1004 args.fOutputColor, args.fOutputColor,
1004 args.fOutputColor, args.fOutputColor); 1005 args.fOutputColor, args.fOutputColor);
1005 } 1006 }
1006 1007
1007 void GrGLPerlinNoise2::GenKey(const GrProcessor& processor, const GrGLSLCaps&, 1008 void GrGLPerlinNoise2::GenKey(const GrProcessor& processor, const GrGLSLCaps&,
1008 GrProcessorKeyBuilder* b) { 1009 GrProcessorKeyBuilder* b) {
1009 const GrPerlinNoise2Effect& turbulence = processor.cast<GrPerlinNoise2Effect >(); 1010 const GrPerlinNoise2Effect& turbulence = processor.cast<GrPerlinNoise2Effect >();
1010 1011
1011 uint32_t key = turbulence.numOctaves(); 1012 uint32_t key = turbulence.numOctaves();
1012 1013
1013 key = key << 3; // Make room for next 3 bits 1014 key = key << 3; // Make room for next 3 bits
1014 1015
1015 switch (turbulence.type()) { 1016 switch (turbulence.type()) {
1016 case SkPerlinNoiseShader2::kFractalNoise_Type: 1017 case SkPerlinNoiseShader2::kFractalNoise_Type:
1017 key |= 0x1; 1018 key |= 0x1;
1018 break; 1019 break;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 return shader->asFragmentProcessor(d->fContext, 1163 return shader->asFragmentProcessor(d->fContext,
1163 GrTest::TestMatrix(d->fRandom), nullptr, 1164 GrTest::TestMatrix(d->fRandom), nullptr,
1164 kNone_SkFilterQuality); 1165 kNone_SkFilterQuality);
1165 } 1166 }
1166 1167
1167 GrGLImprovedPerlinNoise::GrGLImprovedPerlinNoise(const GrProcessor& processor) 1168 GrGLImprovedPerlinNoise::GrGLImprovedPerlinNoise(const GrProcessor& processor)
1168 : fZ(processor.cast<GrImprovedPerlinNoiseEffect>().z()) { 1169 : fZ(processor.cast<GrImprovedPerlinNoiseEffect>().z()) {
1169 } 1170 }
1170 1171
1171 void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { 1172 void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) {
1172 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); 1173 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder() ;
1173 SkString vCoords = fsBuilder->ensureFSCoords2D(args.fCoords, 0); 1174 SkString vCoords = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
1174 1175
1175 fBaseFrequencyUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_ Visibility, 1176 fBaseFrequencyUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragmen t_Visibility,
1176 kVec2f_GrSLType, kDefault_GrSLPrecis ion, 1177 kVec2f_GrSLType, kDefault_GrSLPrecis ion,
1177 "baseFrequency"); 1178 "baseFrequency");
1178 const char* baseFrequencyUni = args.fBuilder->getUniformCStr(fBaseFrequencyU ni); 1179 const char* baseFrequencyUni = args.fBuilder->getUniformCStr(fBaseFrequencyU ni);
1179 1180
1180 fOctavesUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibi lity, 1181 fOctavesUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visi bility,
1181 kFloat_GrSLType, kDefault_GrSLPrecision, 1182 kFloat_GrSLType, kDefault_GrSLPrecision,
1182 "octaves"); 1183 "octaves");
1183 const char* octavesUni = args.fBuilder->getUniformCStr(fOctavesUni); 1184 const char* octavesUni = args.fBuilder->getUniformCStr(fOctavesUni);
1184 1185
1185 fZUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1186 fZUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility ,
1186 kFloat_GrSLType, kDefault_GrSLPrecision, 1187 kFloat_GrSLType, kDefault_GrSLPrecision,
1187 "z"); 1188 "z");
1188 const char* zUni = args.fBuilder->getUniformCStr(fZUni); 1189 const char* zUni = args.fBuilder->getUniformCStr(fZUni);
1189 1190
1190 // fade function 1191 // fade function
1191 static const GrGLSLShaderVar fadeArgs[] = { 1192 static const GrGLSLShaderVar fadeArgs[] = {
1192 GrGLSLShaderVar("t", kVec3f_GrSLType) 1193 GrGLSLShaderVar("t", kVec3f_GrSLType)
1193 }; 1194 };
1194 SkString fadeFuncName; 1195 SkString fadeFuncName;
1195 fsBuilder->emitFunction(kVec3f_GrSLType, "fade", SK_ARRAY_COUNT(fadeArgs), 1196 fsBuilder->emitFunction(kVec3f_GrSLType, "fade", SK_ARRAY_COUNT(fadeArgs),
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
1426 str->append(" seed: "); 1427 str->append(" seed: ");
1427 str->appendScalar(fSeed); 1428 str->appendScalar(fSeed);
1428 str->append(" stitch tiles: "); 1429 str->append(" stitch tiles: ");
1429 str->append(fStitchTiles ? "true " : "false "); 1430 str->append(fStitchTiles ? "true " : "false ");
1430 1431
1431 this->INHERITED::toString(str); 1432 this->INHERITED::toString(str);
1432 1433
1433 str->append(")"); 1434 str->append(")");
1434 } 1435 }
1435 #endif 1436 #endif
OLDNEW
« no previous file with comments | « no previous file | gm/dcshader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698