diff options
author | Mike Klein <mtklein@google.com> | 2017-09-08 22:18:58 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-09-08 22:19:08 +0000 |
commit | acc8d2e11a7e076cce3a4d0be2f062a2c1f23b54 (patch) | |
tree | b41b00e551ff1c8f2e7906c7c74e14902a062985 /src/gpu/effects/GrDistanceFieldGeoProc.cpp | |
parent | e1e47b70e0c55265815c6235d14b493e8e75fdf7 (diff) |
Revert "Revert "Revert "Add multitexture support to text and path shaders"""
This reverts commit 6c251d24cf90a5c4c091bb7b7373e72705f716d2.
Reason for revert: crashes Fuchsia.
Original change's description:
> Revert "Revert "Add multitexture support to text and path shaders""
>
> This does not add additional textures to the atlases, just adds the
> ability to access those textures in the shaders.
>
> Bug: skia:3550
> Change-Id: I552e2c2e4713a5ea68801fdb8e3bab3867e77988
> Reviewed-on: https://skia-review.googlesource.com/44261
> Reviewed-by: Robert Phillips <robertphillips@google.com>
TBR=jvanverth@google.com,robertphillips@google.com
Change-Id: I25cc5f11a1fa76ca7b2cf24920ae3a2a15aac723
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:3550
Reviewed-on: https://skia-review.googlesource.com/44540
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Diffstat (limited to 'src/gpu/effects/GrDistanceFieldGeoProc.cpp')
-rw-r--r-- | src/gpu/effects/GrDistanceFieldGeoProc.cpp | 97 |
1 files changed, 57 insertions, 40 deletions
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp index 953d4cc2bc..81b33262da 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp +++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp @@ -7,7 +7,6 @@ #include "GrDistanceFieldGeoProc.h" -#include "GrAtlasedShaderHelpers.h" #include "GrTexture.h" #include "SkDistanceFieldGen.h" #include "glsl/GrGLSLFragmentShaderBuilder.h" @@ -79,10 +78,17 @@ public: // add varyings GrGLSLVertToFrag uv(kVec2f_GrSLType); - GrGLSLVertToFrag texIdx(kFloat_GrSLType); + varyingHandler->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); + vertBuilder->codeAppendf("%s = float2(%s.x, %s.y) * %s;", uv.vsOut(), + dfTexEffect.inTextureCoords()->fName, + dfTexEffect.inTextureCoords()->fName, + atlasSizeInvName); + GrGLSLVertToFrag st(kVec2f_GrSLType); - append_index_uv_varyings(args, dfTexEffect.inTextureCoords()->fName, atlasSizeInvName, - &uv, &texIdx, &st); + varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision); + vertBuilder->codeAppendf("%s = float2(%s.x, %s.y);", st.vsOut(), + dfTexEffect.inTextureCoords()->fName, + dfTexEffect.inTextureCoords()->fName); bool isUniformScale = (dfTexEffect.getFlags() & kUniformScale_DistanceFieldEffectMask) == kUniformScale_DistanceFieldEffectMask; @@ -94,12 +100,12 @@ public: // Use highp to work around aliasing issues fragBuilder->codeAppendf("highp float2 uv = %s;\n", uv.fsIn()); - fragBuilder->codeAppend("float4 texColor;"); - append_multitexture_lookup(args, dfTexEffect.numTextureSamplers(), - texIdx, "uv", "texColor"); + fragBuilder->codeAppend("float texColor = "); + fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv", kVec2f_GrSLType); + fragBuilder->codeAppend(".r;"); fragBuilder->codeAppend("float distance = " - SK_DistanceFieldMultiplier "*(texColor.r - " SK_DistanceFieldThreshold ");"); + SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFieldThreshold ");"); #ifdef SK_GAMMA_APPLY_TO_A8 // adjust width based on gamma fragBuilder->codeAppendf("distance -= %s;", distanceAdjustUniName); @@ -191,7 +197,7 @@ public: pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } - SkASSERT(dfa8gp.numTextureSamplers() >= 1); + SkASSERT(dfa8gp.numTextureSamplers() == 1); GrTexture* atlas = dfa8gp.textureSampler(0).peekTexture(); SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())); @@ -210,7 +216,6 @@ public: uint32_t key = dfTexEffect.getFlags(); key |= ComputePosKey(dfTexEffect.viewMatrix()) << 16; b->add32(key); - b->add32(dfTexEffect.numTextureSamplers()); } private: @@ -327,10 +332,17 @@ public: &atlasSizeInvName); GrGLSLVertToFrag uv(kVec2f_GrSLType); - GrGLSLVertToFrag texIdx(kFloat_GrSLType); + varyingHandler->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); + vertBuilder->codeAppendf("%s = float2(%s.x, %s.y) * %s;", uv.vsOut(), + dfTexEffect.inTextureCoords()->fName, + dfTexEffect.inTextureCoords()->fName, + atlasSizeInvName); + GrGLSLVertToFrag st(kVec2f_GrSLType); - append_index_uv_varyings(args, dfTexEffect.inTextureCoords()->fName, atlasSizeInvName, - &uv, &texIdx, &st); + varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision); + vertBuilder->codeAppendf("%s = float2(%s.x, %s.y);", st.vsOut(), + dfTexEffect.inTextureCoords()->fName, + dfTexEffect.inTextureCoords()->fName); // setup pass through color varyingHandler->addPassThroughAttribute(dfTexEffect.inColor(), args.fOutputColor); @@ -353,12 +365,12 @@ public: // Use highp to work around aliasing issues fragBuilder->codeAppendf("highp float2 uv = %s;", uv.fsIn()); - fragBuilder->codeAppend("float4 texColor;"); - append_multitexture_lookup(args, dfTexEffect.numTextureSamplers(), - texIdx, "uv", "texColor"); + fragBuilder->codeAppend("float texColor = "); + fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv", kVec2f_GrSLType); + fragBuilder->codeAppend(".r;"); fragBuilder->codeAppend("float distance = " - SK_DistanceFieldMultiplier "*(texColor.r - " SK_DistanceFieldThreshold ");"); + SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFieldThreshold ");"); fragBuilder->codeAppend("float afwidth;"); bool isUniformScale = (dfTexEffect.getFlags() & kUniformScale_DistanceFieldEffectMask) == @@ -440,7 +452,7 @@ public: pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } - SkASSERT(dfpgp.numTextureSamplers() >= 1); + SkASSERT(dfpgp.numTextureSamplers() == 1); GrTexture* atlas = dfpgp.textureSampler(0).peekTexture(); SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())); @@ -460,7 +472,6 @@ public: uint32_t key = dfTexEffect.getFlags(); key |= ComputePosKey(dfTexEffect.viewMatrix()) << 16; b->add32(key); - b->add32(dfTexEffect.numTextureSamplers()); } private: @@ -588,10 +599,17 @@ public: // set up varyings GrGLSLVertToFrag uv(kVec2f_GrSLType); - GrGLSLVertToFrag texIdx(kFloat_GrSLType); + varyingHandler->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); + vertBuilder->codeAppendf("%s = float2(%s.x, %s.y) * %s;", uv.vsOut(), + dfTexEffect.inTextureCoords()->fName, + dfTexEffect.inTextureCoords()->fName, + atlasSizeInvName); + GrGLSLVertToFrag st(kVec2f_GrSLType); - append_index_uv_varyings(args, dfTexEffect.inTextureCoords()->fName, atlasSizeInvName, - &uv, &texIdx, &st); + varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision); + vertBuilder->codeAppendf("%s = float2(%s.x, %s.y);", st.vsOut(), + dfTexEffect.inTextureCoords()->fName, + dfTexEffect.inTextureCoords()->fName); GrGLSLVertToFrag delta(kFloat_GrSLType); varyingHandler->addVarying("Delta", &delta, kHigh_GrSLPrecision); @@ -642,26 +660,26 @@ public: fragBuilder->codeAppendf("float2 offset = %s*Jdx;", delta.fsIn()); } - // sample the texture by index - fragBuilder->codeAppend("float4 texColor;"); - append_multitexture_lookup(args, dfTexEffect.numTextureSamplers(), - texIdx, "uv", "texColor"); - // green is distance to uv center - fragBuilder->codeAppend("float3 distance;"); - fragBuilder->codeAppend("distance.y = texColor.r;"); + fragBuilder->codeAppend("\tfloat4 texColor = "); + fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv", kVec2f_GrSLType); + fragBuilder->codeAppend(";\n"); + fragBuilder->codeAppend("\tfloat3 distance;\n"); + fragBuilder->codeAppend("\tdistance.y = texColor.r;\n"); // red is distance to left offset - fragBuilder->codeAppend("float2 uv_adjusted = uv - offset;"); - append_multitexture_lookup(args, dfTexEffect.numTextureSamplers(), - texIdx, "uv_adjusted", "texColor"); - fragBuilder->codeAppend("distance.x = texColor.r;"); + fragBuilder->codeAppend("\tfloat2 uv_adjusted = uv - offset;\n"); + fragBuilder->codeAppend("\ttexColor = "); + fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv_adjusted", kVec2f_GrSLType); + fragBuilder->codeAppend(";\n"); + fragBuilder->codeAppend("\tdistance.x = texColor.r;\n"); // blue is distance to right offset - fragBuilder->codeAppend("uv_adjusted = uv + offset;"); - append_multitexture_lookup(args, dfTexEffect.numTextureSamplers(), - texIdx, "uv_adjusted", "texColor"); - fragBuilder->codeAppend("distance.z = texColor.r;"); + fragBuilder->codeAppend("\tuv_adjusted = uv + offset;\n"); + fragBuilder->codeAppend("\ttexColor = "); + fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv_adjusted", kVec2f_GrSLType); + fragBuilder->codeAppend(";\n"); + fragBuilder->codeAppend("\tdistance.z = texColor.r;\n"); - fragBuilder->codeAppend("distance = " + fragBuilder->codeAppend("\tdistance = " "float3(" SK_DistanceFieldMultiplier ")*(distance - float3(" SK_DistanceFieldThreshold"));"); // adjust width based on gamma @@ -739,7 +757,7 @@ public: pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } - SkASSERT(dflcd.numTextureSamplers() >= 1); + SkASSERT(dflcd.numTextureSamplers() == 1); GrTexture* atlas = dflcd.textureSampler(0).peekTexture(); SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())); @@ -759,7 +777,6 @@ public: uint32_t key = dfTexEffect.getFlags(); key |= ComputePosKey(dfTexEffect.viewMatrix()) << 16; b->add32(key); - b->add32(dfTexEffect.numTextureSamplers()); } private: |