aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects/GrDistanceFieldGeoProc.cpp
diff options
context:
space:
mode:
authorGravatar Jim Van Verth <jvanverth@google.com>2017-09-08 14:43:47 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-08 14:43:54 +0000
commite7492fe49c61915b70bde648b75f9b6fc60b4bef (patch)
tree0b8502ef3047f553e2427ee71f0e8c1508b2a6f6 /src/gpu/effects/GrDistanceFieldGeoProc.cpp
parent336ce7babc1c6c9184a69e39fd4ee877ae4a067b (diff)
Revert "Add multitexture support to text and path shaders"
This reverts commit 7f754260f7fc2ae0326a072dd2f0429e584f8ca0. Reason for revert: Bot failures. Original change's description: > 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: I636b329a6f748b6753f5f92a70066fb412623df2 > Reviewed-on: https://skia-review.googlesource.com/43000 > Reviewed-by: Brian Salomon <bsalomon@google.com> > Commit-Queue: Jim Van Verth <jvanverth@google.com> TBR=jvanverth@google.com,bsalomon@google.com,robertphillips@google.com Change-Id: I5c28ea48ed9bdde2cd936ef4f96fc720d5e4b4a5 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia:3550 Reviewed-on: https://skia-review.googlesource.com/44162 Reviewed-by: Jim Van Verth <jvanverth@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com>
Diffstat (limited to 'src/gpu/effects/GrDistanceFieldGeoProc.cpp')
-rw-r--r--src/gpu/effects/GrDistanceFieldGeoProc.cpp97
1 files changed, 57 insertions, 40 deletions
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp
index b8f0386820..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);
+ 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);
- GrGLSLVertToFrag texIdx(kFloat_GrSLType);
- append_index_uv_varyings(args, dfTexEffect.inTextureCoords()->fName, atlasSizeInvName,
- &uv, &st, &texIdx);
+ 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);
+ 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);
- GrGLSLVertToFrag texIdx(kFloat_GrSLType);
- append_index_uv_varyings(args, dfTexEffect.inTextureCoords()->fName, atlasSizeInvName,
- &uv, &st, &texIdx);
+ 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);
+ 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);
- GrGLSLVertToFrag texIdx(kFloat_GrSLType);
- append_index_uv_varyings(args, dfTexEffect.inTextureCoords()->fName, atlasSizeInvName,
- &uv, &st, &texIdx);
+ 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: