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

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

Issue 1885863004: Refactor how we store and use samplers in Ganesh (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 8 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
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 "GrDistanceFieldGeoProc.h" 8 #include "GrDistanceFieldGeoProc.h"
9 #include "GrInvariantOutput.h" 9 #include "GrInvariantOutput.h"
10 #include "GrTexture.h" 10 #include "GrTexture.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision) ; 94 varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision) ;
95 vertBuilder->codeAppendf("%s = vec2(%d, %d) * %s;", st.vsOut(), 95 vertBuilder->codeAppendf("%s = vec2(%d, %d) * %s;", st.vsOut(),
96 atlas->width(), atlas->height(), 96 atlas->width(), atlas->height(),
97 dfTexEffect.inTextureCoords()->fName); 97 dfTexEffect.inTextureCoords()->fName);
98 98
99 // Use highp to work around aliasing issues 99 // Use highp to work around aliasing issues
100 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision); 100 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision);
101 fragBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); 101 fragBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn());
102 102
103 fragBuilder->codeAppend("\tfloat texColor = "); 103 fragBuilder->codeAppend("\tfloat texColor = ");
104 fragBuilder->appendTextureLookup(args.fTexSamplers[0], 104 fragBuilder->appendTextureLookup(uniformHandler->getSampler(args.fTexSam plers[0]),
105 "uv", 105 "uv",
106 kVec2f_GrSLType); 106 kVec2f_GrSLType);
107 fragBuilder->codeAppend(".r;\n"); 107 fragBuilder->codeAppend(".r;\n");
108 fragBuilder->codeAppend("\tfloat distance = " 108 fragBuilder->codeAppend("\tfloat distance = "
109 SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFie ldThreshold ");"); 109 SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFie ldThreshold ");");
110 #ifdef SK_GAMMA_APPLY_TO_A8 110 #ifdef SK_GAMMA_APPLY_TO_A8
111 // adjust width based on gamma 111 // adjust width based on gamma
112 fragBuilder->codeAppendf("distance -= %s;", distanceAdjustUniName); 112 fragBuilder->codeAppendf("distance -= %s;", distanceAdjustUniName);
113 #endif 113 #endif
114 114
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 const char* textureSizeUniName = nullptr; 331 const char* textureSizeUniName = nullptr;
332 fTextureSizeUni = uniformHandler->addUniform(kFragment_GrShaderFlag, 332 fTextureSizeUni = uniformHandler->addUniform(kFragment_GrShaderFlag,
333 kVec2f_GrSLType, kDefault_G rSLPrecision, 333 kVec2f_GrSLType, kDefault_G rSLPrecision,
334 "TextureSize", &textureSize UniName); 334 "TextureSize", &textureSize UniName);
335 335
336 // Use highp to work around aliasing issues 336 // Use highp to work around aliasing issues
337 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision); 337 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision);
338 fragBuilder->codeAppendf("vec2 uv = %s;", v.fsIn()); 338 fragBuilder->codeAppendf("vec2 uv = %s;", v.fsIn());
339 339
340 fragBuilder->codeAppend("float texColor = "); 340 fragBuilder->codeAppend("float texColor = ");
341 fragBuilder->appendTextureLookup(args.fTexSamplers[0], 341 fragBuilder->appendTextureLookup(uniformHandler->getSampler(args.fTexSam plers[0]),
342 "uv", 342 "uv",
343 kVec2f_GrSLType); 343 kVec2f_GrSLType);
344 fragBuilder->codeAppend(".r;"); 344 fragBuilder->codeAppend(".r;");
345 fragBuilder->codeAppend("float distance = " 345 fragBuilder->codeAppend("float distance = "
346 SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFieldThreshold ");"); 346 SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFieldThreshold ");");
347 347
348 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision); 348 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision);
349 fragBuilder->codeAppendf("vec2 st = uv*%s;", textureSizeUniName); 349 fragBuilder->codeAppendf("vec2 st = uv*%s;", textureSizeUniName);
350 fragBuilder->codeAppend("float afwidth;"); 350 fragBuilder->codeAppend("float afwidth;");
351 bool isUniformScale = (dfTexEffect.getFlags() & kUniformScale_DistanceFi eldEffectMask) == 351 bool isUniformScale = (dfTexEffect.getFlags() & kUniformScale_DistanceFi eldEffectMask) ==
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 fragBuilder->codeAppend("float st_grad_len = length(st_grad);"); 598 fragBuilder->codeAppend("float st_grad_len = length(st_grad);");
599 fragBuilder->codeAppend("vec2 offset = delta*vec2(st_grad.y, -st_gra d.x);"); 599 fragBuilder->codeAppend("vec2 offset = delta*vec2(st_grad.y, -st_gra d.x);");
600 } else { 600 } else {
601 fragBuilder->codeAppendf("vec2 st = %s;\n", st.fsIn()); 601 fragBuilder->codeAppendf("vec2 st = %s;\n", st.fsIn());
602 602
603 fragBuilder->codeAppend("vec2 Jdx = dFdx(st);"); 603 fragBuilder->codeAppend("vec2 Jdx = dFdx(st);");
604 fragBuilder->codeAppend("vec2 Jdy = dFdy(st);"); 604 fragBuilder->codeAppend("vec2 Jdy = dFdy(st);");
605 fragBuilder->codeAppend("vec2 offset = delta*Jdx;"); 605 fragBuilder->codeAppend("vec2 offset = delta*Jdx;");
606 } 606 }
607 607
608 const GrGLSLSampler& sampler = uniformHandler->getSampler(args.fTexSampl ers[0]);
608 // green is distance to uv center 609 // green is distance to uv center
609 fragBuilder->codeAppend("\tvec4 texColor = "); 610 fragBuilder->codeAppend("\tvec4 texColor = ");
610 fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv", kVec2f_GrSL Type); 611 fragBuilder->appendTextureLookup(sampler, "uv",kVec2f_GrSLType);
611 fragBuilder->codeAppend(";\n"); 612 fragBuilder->codeAppend(";\n");
612 fragBuilder->codeAppend("\tvec3 distance;\n"); 613 fragBuilder->codeAppend("\tvec3 distance;\n");
613 fragBuilder->codeAppend("\tdistance.y = texColor.r;\n"); 614 fragBuilder->codeAppend("\tdistance.y = texColor.r;\n");
614 // red is distance to left offset 615 // red is distance to left offset
615 fragBuilder->codeAppend("\tvec2 uv_adjusted = uv - offset;\n"); 616 fragBuilder->codeAppend("\tvec2 uv_adjusted = uv - offset;\n");
616 fragBuilder->codeAppend("\ttexColor = "); 617 fragBuilder->codeAppend("\ttexColor = ");
617 fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv_adjusted", kV ec2f_GrSLType); 618 fragBuilder->appendTextureLookup(sampler, "uv_adjusted", kVec2f_GrSLType );
618 fragBuilder->codeAppend(";\n"); 619 fragBuilder->codeAppend(";\n");
619 fragBuilder->codeAppend("\tdistance.x = texColor.r;\n"); 620 fragBuilder->codeAppend("\tdistance.x = texColor.r;\n");
620 // blue is distance to right offset 621 // blue is distance to right offset
621 fragBuilder->codeAppend("\tuv_adjusted = uv + offset;\n"); 622 fragBuilder->codeAppend("\tuv_adjusted = uv + offset;\n");
622 fragBuilder->codeAppend("\ttexColor = "); 623 fragBuilder->codeAppend("\ttexColor = ");
623 fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv_adjusted", kV ec2f_GrSLType); 624 fragBuilder->appendTextureLookup(sampler, "uv_adjusted", kVec2f_GrSLType );
624 fragBuilder->codeAppend(";\n"); 625 fragBuilder->codeAppend(";\n");
625 fragBuilder->codeAppend("\tdistance.z = texColor.r;\n"); 626 fragBuilder->codeAppend("\tdistance.z = texColor.r;\n");
626 627
627 fragBuilder->codeAppend("\tdistance = " 628 fragBuilder->codeAppend("\tdistance = "
628 "vec3(" SK_DistanceFieldMultiplier ")*(distance - vec3(" SK_DistanceF ieldThreshold"));"); 629 "vec3(" SK_DistanceFieldMultiplier ")*(distance - vec3(" SK_DistanceF ieldThreshold"));");
629 630
630 // adjust width based on gamma 631 // adjust width based on gamma
631 const char* distanceAdjustUniName = nullptr; 632 const char* distanceAdjustUniName = nullptr;
632 fDistanceAdjustUni = uniformHandler->addUniform(kFragment_GrShaderFlag, 633 fDistanceAdjustUni = uniformHandler->addUniform(kFragment_GrShaderFlag,
633 kVec3f_GrSLType, kDefaul t_GrSLPrecision, 634 kVec3f_GrSLType, kDefaul t_GrSLPrecision,
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 flags |= d->fRandom->nextBool() ? kScaleOnly_DistanceFieldEffectFlag : 0 ; 784 flags |= d->fRandom->nextBool() ? kScaleOnly_DistanceFieldEffectFlag : 0 ;
784 } 785 }
785 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; 786 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0;
786 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(d->fRandom), 787 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(d->fRandom),
787 GrTest::TestMatrix(d->fRandom), 788 GrTest::TestMatrix(d->fRandom),
788 d->fTextures[texIdx], params, 789 d->fTextures[texIdx], params,
789 wa, 790 wa,
790 flags, 791 flags,
791 d->fRandom->nextBool()); 792 d->fRandom->nextBool());
792 } 793 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698