aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ops
diff options
context:
space:
mode:
authorGravatar Ruiqi Mao <ruiqimao@google.com>2018-07-17 10:19:38 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-17 15:08:40 +0000
commitb609e6dc6a02336aed04caaddcdd5ccfbe7ba9ec (patch)
tree052d6e5c5c7835481f5a0e0bead6ec575679b76f /src/gpu/ops
parent6dd4b209091b876832218e8adf1909669960bf98 (diff)
added byte and ubyte types to SKSL
created new GMs for skinning Bug: skia: Change-Id: I15fb2bd02fba8beb6dd2dd3f3716da016ea92192 Reviewed-on: https://skia-review.googlesource.com/140241 Commit-Queue: Ruiqi Mao <ruiqimao@google.com> Reviewed-by: Brian Osman <brianosman@google.com> Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'src/gpu/ops')
-rw-r--r--src/gpu/ops/GrAAConvexPathRenderer.cpp11
-rw-r--r--src/gpu/ops/GrAAFillRectOp.cpp3
-rw-r--r--src/gpu/ops/GrAAHairLinePathRenderer.cpp3
-rw-r--r--src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp11
-rw-r--r--src/gpu/ops/GrAAStrokeRectOp.cpp11
-rw-r--r--src/gpu/ops/GrDashOp.cpp5
-rw-r--r--src/gpu/ops/GrDefaultPathRenderer.cpp6
-rw-r--r--src/gpu/ops/GrDrawAtlasOp.cpp10
-rw-r--r--src/gpu/ops/GrDrawVerticesOp.cpp32
-rw-r--r--src/gpu/ops/GrDrawVerticesOp.h3
-rw-r--r--src/gpu/ops/GrNonAAFillRectOp.cpp26
-rw-r--r--src/gpu/ops/GrNonAAStrokeRectOp.cpp3
-rw-r--r--src/gpu/ops/GrRegionOp.cpp10
-rw-r--r--src/gpu/ops/GrTessellatingPathRenderer.cpp6
14 files changed, 94 insertions, 46 deletions
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index 7f54357cc4..3d475b947a 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -723,7 +723,8 @@ static void extract_lines_only_verts(const GrAAConvexTessellator& tess,
}
}
-static sk_sp<GrGeometryProcessor> make_lines_only_gp(bool tweakAlphaForCoverage,
+static sk_sp<GrGeometryProcessor> make_lines_only_gp(const GrShaderCaps* shaderCaps,
+ bool tweakAlphaForCoverage,
const SkMatrix& viewMatrix,
bool usesLocalCoords) {
using namespace GrDefaultGeoProcFactory;
@@ -736,7 +737,10 @@ static sk_sp<GrGeometryProcessor> make_lines_only_gp(bool tweakAlphaForCoverage,
}
LocalCoords::Type localCoordsType =
usesLocalCoords ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type;
- return MakeForDeviceSpace(Color::kPremulGrColorAttribute_Type, coverageType, localCoordsType,
+ return MakeForDeviceSpace(shaderCaps,
+ Color::kPremulGrColorAttribute_Type,
+ coverageType,
+ localCoordsType,
viewMatrix);
}
@@ -790,7 +794,8 @@ public:
private:
void prepareLinesOnlyDraws(Target* target) {
// Setup GrGeometryProcessor
- sk_sp<GrGeometryProcessor> gp(make_lines_only_gp(fHelper.compatibleWithAlphaAsCoverage(),
+ sk_sp<GrGeometryProcessor> gp(make_lines_only_gp(target->caps().shaderCaps(),
+ fHelper.compatibleWithAlphaAsCoverage(),
fPaths.back().fViewMatrix,
fHelper.usesLocalCoords()));
if (!gp) {
diff --git a/src/gpu/ops/GrAAFillRectOp.cpp b/src/gpu/ops/GrAAFillRectOp.cpp
index 0d97de493a..592c0b2774 100644
--- a/src/gpu/ops/GrAAFillRectOp.cpp
+++ b/src/gpu/ops/GrAAFillRectOp.cpp
@@ -255,7 +255,8 @@ private:
}
sk_sp<GrGeometryProcessor> gp =
- GrDefaultGeoProcFactory::Make(color, coverageType, lc, SkMatrix::I());
+ GrDefaultGeoProcFactory::Make(target->caps().shaderCaps(), color, coverageType,
+ lc, SkMatrix::I());
if (!gp) {
SkDebugf("Couldn't create GrGeometryProcessor\n");
return;
diff --git a/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
index bed8cbfd34..d6f3c0664e 100644
--- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
@@ -951,7 +951,8 @@ void AAHairlineOp::onPrepareDraws(Target* target) {
LocalCoords localCoords(fHelper.usesLocalCoords() ? LocalCoords::kUsePosition_Type
: LocalCoords::kUnused_Type);
localCoords.fMatrix = geometryProcessorLocalM;
- lineGP = GrDefaultGeoProcFactory::Make(color, Coverage::kAttribute_Type, localCoords,
+ lineGP = GrDefaultGeoProcFactory::Make(target->caps().shaderCaps(),
+ color, Coverage::kAttribute_Type, localCoords,
*geometryProcessorViewM);
}
diff --git a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
index 958f0f991e..75662d35fe 100644
--- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
@@ -112,7 +112,8 @@ static void extract_verts(const GrAAConvexTessellator& tess,
}
}
-static sk_sp<GrGeometryProcessor> create_lines_only_gp(bool tweakAlphaForCoverage,
+static sk_sp<GrGeometryProcessor> create_lines_only_gp(const GrShaderCaps* shaderCaps,
+ bool tweakAlphaForCoverage,
const SkMatrix& viewMatrix,
bool usesLocalCoords) {
using namespace GrDefaultGeoProcFactory;
@@ -125,7 +126,10 @@ static sk_sp<GrGeometryProcessor> create_lines_only_gp(bool tweakAlphaForCoverag
}
LocalCoords::Type localCoordsType =
usesLocalCoords ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type;
- return MakeForDeviceSpace(Color::kPremulGrColorAttribute_Type, coverageType, localCoordsType,
+ return MakeForDeviceSpace(shaderCaps,
+ Color::kPremulGrColorAttribute_Type,
+ coverageType,
+ localCoordsType,
viewMatrix);
}
@@ -240,7 +244,8 @@ private:
void onPrepareDraws(Target* target) override {
auto pipe = fHelper.makePipeline(target);
// Setup GrGeometryProcessor
- sk_sp<GrGeometryProcessor> gp(create_lines_only_gp(fHelper.compatibleWithAlphaAsCoverage(),
+ sk_sp<GrGeometryProcessor> gp(create_lines_only_gp(target->caps().shaderCaps(),
+ fHelper.compatibleWithAlphaAsCoverage(),
this->viewMatrix(),
fHelper.usesLocalCoords()));
if (!gp) {
diff --git a/src/gpu/ops/GrAAStrokeRectOp.cpp b/src/gpu/ops/GrAAStrokeRectOp.cpp
index 1b2ab8e2a6..92d1c01a3d 100644
--- a/src/gpu/ops/GrAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrAAStrokeRectOp.cpp
@@ -94,7 +94,8 @@ static void compute_rects(SkRect* devOutside, SkRect* devOutsideAssist, SkRect*
}
}
-static sk_sp<GrGeometryProcessor> create_stroke_rect_gp(bool tweakAlphaForCoverage,
+static sk_sp<GrGeometryProcessor> create_stroke_rect_gp(const GrShaderCaps* shaderCaps,
+ bool tweakAlphaForCoverage,
const SkMatrix& viewMatrix,
bool usesLocalCoords) {
using namespace GrDefaultGeoProcFactory;
@@ -107,7 +108,10 @@ static sk_sp<GrGeometryProcessor> create_stroke_rect_gp(bool tweakAlphaForCovera
}
LocalCoords::Type localCoordsType =
usesLocalCoords ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type;
- return MakeForDeviceSpace(Color::kPremulGrColorAttribute_Type, coverageType, localCoordsType,
+ return MakeForDeviceSpace(shaderCaps,
+ Color::kPremulGrColorAttribute_Type,
+ coverageType,
+ localCoordsType,
viewMatrix);
}
@@ -258,7 +262,8 @@ private:
} // anonymous namespace
void AAStrokeRectOp::onPrepareDraws(Target* target) {
- sk_sp<GrGeometryProcessor> gp(create_stroke_rect_gp(fHelper.compatibleWithAlphaAsCoverage(),
+ sk_sp<GrGeometryProcessor> gp(create_stroke_rect_gp(target->caps().shaderCaps(),
+ fHelper.compatibleWithAlphaAsCoverage(),
this->viewMatrix(),
fHelper.usesLocalCoords()));
if (!gp) {
diff --git a/src/gpu/ops/GrDashOp.cpp b/src/gpu/ops/GrDashOp.cpp
index 76203e521a..61fad24bcd 100644
--- a/src/gpu/ops/GrDashOp.cpp
+++ b/src/gpu/ops/GrDashOp.cpp
@@ -392,7 +392,10 @@ private:
Color color(this->color());
LocalCoords::Type localCoordsType =
fUsesLocalCoords ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type;
- gp = MakeForDeviceSpace(color, Coverage::kSolid_Type, localCoordsType,
+ gp = MakeForDeviceSpace(target->caps().shaderCaps(),
+ color,
+ Coverage::kSolid_Type,
+ localCoordsType,
this->viewMatrix());
}
diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp
index 9fb1027375..07e40f0454 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.cpp
+++ b/src/gpu/ops/GrDefaultPathRenderer.cpp
@@ -405,7 +405,11 @@ private:
Coverage coverage(this->coverage());
LocalCoords localCoords(fHelper.usesLocalCoords() ? LocalCoords::kUsePosition_Type
: LocalCoords::kUnused_Type);
- gp = GrDefaultGeoProcFactory::Make(color, coverage, localCoords, this->viewMatrix());
+ gp = GrDefaultGeoProcFactory::Make(target->caps().shaderCaps(),
+ color,
+ coverage,
+ localCoords,
+ this->viewMatrix());
}
SkASSERT(gp->debugOnly_vertexStride() == sizeof(SkPoint));
diff --git a/src/gpu/ops/GrDrawAtlasOp.cpp b/src/gpu/ops/GrDrawAtlasOp.cpp
index 0f94d7e548..d280ad9dff 100644
--- a/src/gpu/ops/GrDrawAtlasOp.cpp
+++ b/src/gpu/ops/GrDrawAtlasOp.cpp
@@ -13,7 +13,8 @@
#include "SkRandom.h"
#include "SkRectPriv.h"
-static sk_sp<GrGeometryProcessor> make_gp(bool hasColors,
+static sk_sp<GrGeometryProcessor> make_gp(const GrShaderCaps* shaderCaps,
+ bool hasColors,
GrColor color,
const SkMatrix& viewMatrix) {
using namespace GrDefaultGeoProcFactory;
@@ -22,7 +23,7 @@ static sk_sp<GrGeometryProcessor> make_gp(bool hasColors,
gpColor.fType = Color::kPremulGrColorAttribute_Type;
}
- return GrDefaultGeoProcFactory::Make(gpColor, Coverage::kSolid_Type,
+ return GrDefaultGeoProcFactory::Make(shaderCaps, gpColor, Coverage::kSolid_Type,
LocalCoords::kHasExplicit_Type, viewMatrix);
}
@@ -119,7 +120,10 @@ SkString GrDrawAtlasOp::dumpInfo() const {
void GrDrawAtlasOp::onPrepareDraws(Target* target) {
// Setup geometry processor
- sk_sp<GrGeometryProcessor> gp(make_gp(this->hasColors(), this->color(), this->viewMatrix()));
+ sk_sp<GrGeometryProcessor> gp(make_gp(target->caps().shaderCaps(),
+ this->hasColors(),
+ this->color(),
+ this->viewMatrix()));
int instanceCount = fGeoData.count();
size_t vertexStride =
diff --git a/src/gpu/ops/GrDrawVerticesOp.cpp b/src/gpu/ops/GrDrawVerticesOp.cpp
index 83a703fb54..b5d16ea83a 100644
--- a/src/gpu/ops/GrDrawVerticesOp.cpp
+++ b/src/gpu/ops/GrDrawVerticesOp.cpp
@@ -152,7 +152,8 @@ GrDrawOp::RequiresDstTexture GrDrawVerticesOp::finalize(const GrCaps& caps,
return result;
}
-sk_sp<GrGeometryProcessor> GrDrawVerticesOp::makeGP(bool* hasColorAttribute,
+sk_sp<GrGeometryProcessor> GrDrawVerticesOp::makeGP(const GrShaderCaps* shaderCaps,
+ bool* hasColorAttribute,
bool* hasLocalCoordAttribute,
bool* hasBoneAttribute) const {
using namespace GrDefaultGeoProcFactory;
@@ -191,13 +192,15 @@ sk_sp<GrGeometryProcessor> GrDrawVerticesOp::makeGP(bool* hasColorAttribute,
*hasBoneAttribute = this->hasBones();
if (this->hasBones()) {
- return GrDefaultGeoProcFactory::MakeWithBones(color,
+ return GrDefaultGeoProcFactory::MakeWithBones(shaderCaps,
+ color,
Coverage::kSolid_Type,
localCoordsType,
bones,
vm);
} else {
- return GrDefaultGeoProcFactory::Make(color,
+ return GrDefaultGeoProcFactory::Make(shaderCaps,
+ color,
Coverage::kSolid_Type,
localCoordsType,
vm);
@@ -205,7 +208,8 @@ sk_sp<GrGeometryProcessor> GrDrawVerticesOp::makeGP(bool* hasColorAttribute,
}
void GrDrawVerticesOp::onPrepareDraws(Target* target) {
- if (fMeshes[0].fVertices->isVolatile()) {
+ bool hasMapBufferSupport = GrCaps::kNone_MapFlags != target->caps().mapBufferFlags();
+ if (fMeshes[0].fVertices->isVolatile() || !hasMapBufferSupport) {
this->drawVolatile(target);
} else {
this->drawNonVolatile(target);
@@ -216,7 +220,8 @@ void GrDrawVerticesOp::drawVolatile(Target* target) {
bool hasColorAttribute;
bool hasLocalCoordsAttribute;
bool hasBoneAttribute;
- sk_sp<GrGeometryProcessor> gp = this->makeGP(&hasColorAttribute,
+ sk_sp<GrGeometryProcessor> gp = this->makeGP(target->caps().shaderCaps(),
+ &hasColorAttribute,
&hasLocalCoordsAttribute,
&hasBoneAttribute);
@@ -224,7 +229,7 @@ void GrDrawVerticesOp::drawVolatile(Target* target) {
size_t vertexStride = sizeof(SkPoint) +
(hasColorAttribute ? sizeof(uint32_t) : 0) +
(hasLocalCoordsAttribute ? sizeof(SkPoint) : 0) +
- (hasBoneAttribute ? 4 * (sizeof(uint32_t) + sizeof(float)) : 0);
+ (hasBoneAttribute ? 4 * (sizeof(int8_t) + sizeof(uint8_t)) : 0);
SkASSERT(vertexStride == gp->debugOnly_vertexStride());
// Allocate buffers.
@@ -265,7 +270,8 @@ void GrDrawVerticesOp::drawNonVolatile(Target* target) {
bool hasColorAttribute;
bool hasLocalCoordsAttribute;
bool hasBoneAttribute;
- sk_sp<GrGeometryProcessor> gp = this->makeGP(&hasColorAttribute,
+ sk_sp<GrGeometryProcessor> gp = this->makeGP(target->caps().shaderCaps(),
+ &hasColorAttribute,
&hasLocalCoordsAttribute,
&hasBoneAttribute);
@@ -300,7 +306,7 @@ void GrDrawVerticesOp::drawNonVolatile(Target* target) {
size_t vertexStride = sizeof(SkPoint) +
(hasColorAttribute ? sizeof(uint32_t) : 0) +
(hasLocalCoordsAttribute ? sizeof(SkPoint) : 0) +
- (hasBoneAttribute ? 4 * (sizeof(uint32_t) + sizeof(float)) : 0);
+ (hasBoneAttribute ? 4 * (sizeof(int8_t) + sizeof(uint8_t)) : 0);
SkASSERT(vertexStride == gp->debugOnly_vertexStride());
// Allocate vertex buffer.
@@ -417,7 +423,7 @@ void GrDrawVerticesOp::fillBuffers(bool hasColorAttribute,
}
size_t boneIndexOffset = offset;
if (hasBoneAttribute) {
- offset += 4 * sizeof(uint32_t);
+ offset += 4 * sizeof(int8_t);
}
size_t boneWeightOffset = offset;
@@ -445,10 +451,10 @@ void GrDrawVerticesOp::fillBuffers(bool hasColorAttribute,
const SkVertices::BoneIndices& indices = boneIndices[j];
const SkVertices::BoneWeights& weights = boneWeights[j];
for (int k = 0; k < 4; k++) {
- size_t indexOffset = boneIndexOffset + sizeof(uint32_t) * k;
- size_t weightOffset = boneWeightOffset + sizeof(float) * k;
- *(uint32_t*)((intptr_t)verts + indexOffset) = indices.indices[k];
- *(float*)((intptr_t)verts + weightOffset) = weights.weights[k];
+ size_t indexOffset = boneIndexOffset + sizeof(int8_t) * k;
+ size_t weightOffset = boneWeightOffset + sizeof(uint8_t) * k;
+ *(int8_t*)((intptr_t)verts + indexOffset) = indices.indices[k];
+ *(uint8_t*)((intptr_t)verts + weightOffset) = weights.weights[k] * 255.0f;
}
}
verts = (void*)((intptr_t)verts + vertexStride);
diff --git a/src/gpu/ops/GrDrawVerticesOp.h b/src/gpu/ops/GrDrawVerticesOp.h
index 9b638b8172..7695dd9f87 100644
--- a/src/gpu/ops/GrDrawVerticesOp.h
+++ b/src/gpu/ops/GrDrawVerticesOp.h
@@ -86,7 +86,8 @@ private:
const GrBuffer* indexBuffer,
int firstIndex);
- sk_sp<GrGeometryProcessor> makeGP(bool* hasColorAttribute,
+ sk_sp<GrGeometryProcessor> makeGP(const GrShaderCaps* shaderCaps,
+ bool* hasColorAttribute,
bool* hasLocalCoordAttribute,
bool* hasBoneAttribute) const;
diff --git a/src/gpu/ops/GrNonAAFillRectOp.cpp b/src/gpu/ops/GrNonAAFillRectOp.cpp
index 1b76d4abfe..c5542328c7 100644
--- a/src/gpu/ops/GrNonAAFillRectOp.cpp
+++ b/src/gpu/ops/GrNonAAFillRectOp.cpp
@@ -29,13 +29,17 @@ static const int kIndicesPerRect = 6;
The vertex attrib order is always pos, color, [local coords].
*/
-static sk_sp<GrGeometryProcessor> make_gp() {
+static sk_sp<GrGeometryProcessor> make_gp(const GrShaderCaps* shaderCaps) {
using namespace GrDefaultGeoProcFactory;
- return GrDefaultGeoProcFactory::Make(Color::kPremulGrColorAttribute_Type, Coverage::kSolid_Type,
- LocalCoords::kHasExplicit_Type, SkMatrix::I());
+ return GrDefaultGeoProcFactory::Make(shaderCaps,
+ Color::kPremulGrColorAttribute_Type,
+ Coverage::kSolid_Type,
+ LocalCoords::kHasExplicit_Type,
+ SkMatrix::I());
}
-static sk_sp<GrGeometryProcessor> make_perspective_gp(const SkMatrix& viewMatrix,
+static sk_sp<GrGeometryProcessor> make_perspective_gp(const GrShaderCaps* shaderCaps,
+ const SkMatrix& viewMatrix,
bool hasExplicitLocalCoords,
const SkMatrix* localMatrix) {
SkASSERT(viewMatrix.hasPerspective() || (localMatrix && localMatrix->hasPerspective()));
@@ -50,15 +54,16 @@ static sk_sp<GrGeometryProcessor> make_perspective_gp(const SkMatrix& viewMatrix
LocalCoords localCoords(hasExplicitLocalCoords ? LocalCoords::kHasExplicit_Type
: LocalCoords::kUsePosition_Type,
localMatrix);
- return GrDefaultGeoProcFactory::Make(Color::kPremulGrColorAttribute_Type,
+ return GrDefaultGeoProcFactory::Make(shaderCaps, Color::kPremulGrColorAttribute_Type,
Coverage::kSolid_Type, localCoords, viewMatrix);
} else if (hasExplicitLocalCoords) {
LocalCoords localCoords(LocalCoords::kHasExplicit_Type, localMatrix);
- return GrDefaultGeoProcFactory::Make(Color::kPremulGrColorAttribute_Type,
+ return GrDefaultGeoProcFactory::Make(shaderCaps, Color::kPremulGrColorAttribute_Type,
Coverage::kSolid_Type, localCoords, SkMatrix::I());
} else {
LocalCoords localCoords(LocalCoords::kUsePosition_Type, localMatrix);
- return GrDefaultGeoProcFactory::MakeForDeviceSpace(Color::kPremulGrColorAttribute_Type,
+ return GrDefaultGeoProcFactory::MakeForDeviceSpace(shaderCaps,
+ Color::kPremulGrColorAttribute_Type,
Coverage::kSolid_Type, localCoords,
viewMatrix);
}
@@ -174,7 +179,7 @@ public:
private:
void onPrepareDraws(Target* target) override {
- sk_sp<GrGeometryProcessor> gp = make_gp();
+ sk_sp<GrGeometryProcessor> gp = make_gp(target->caps().shaderCaps());
if (!gp) {
SkDebugf("Couldn't create GrGeometryProcessor\n");
return;
@@ -304,7 +309,10 @@ public:
private:
void onPrepareDraws(Target* target) override {
sk_sp<GrGeometryProcessor> gp = make_perspective_gp(
- fViewMatrix, fHasLocalRect, fHasLocalMatrix ? &fLocalMatrix : nullptr);
+ target->caps().shaderCaps(),
+ fViewMatrix,
+ fHasLocalRect,
+ fHasLocalMatrix ? &fLocalMatrix : nullptr);
if (!gp) {
SkDebugf("Couldn't create GrGeometryProcessor\n");
return;
diff --git a/src/gpu/ops/GrNonAAStrokeRectOp.cpp b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
index 357d9232ff..21636b26dc 100644
--- a/src/gpu/ops/GrNonAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
@@ -147,7 +147,8 @@ private:
LocalCoords::Type localCoordsType = fHelper.usesLocalCoords()
? LocalCoords::kUsePosition_Type
: LocalCoords::kUnused_Type;
- gp = GrDefaultGeoProcFactory::Make(color, Coverage::kSolid_Type, localCoordsType,
+ gp = GrDefaultGeoProcFactory::Make(target->caps().shaderCaps(), color,
+ Coverage::kSolid_Type, localCoordsType,
fViewMatrix);
}
diff --git a/src/gpu/ops/GrRegionOp.cpp b/src/gpu/ops/GrRegionOp.cpp
index 852cd46c70..d0c24e6e73 100644
--- a/src/gpu/ops/GrRegionOp.cpp
+++ b/src/gpu/ops/GrRegionOp.cpp
@@ -19,10 +19,12 @@
static const int kVertsPerInstance = 4;
static const int kIndicesPerInstance = 6;
-static sk_sp<GrGeometryProcessor> make_gp(const SkMatrix& viewMatrix) {
+static sk_sp<GrGeometryProcessor> make_gp(const GrShaderCaps* shaderCaps,
+ const SkMatrix& viewMatrix) {
using namespace GrDefaultGeoProcFactory;
- return GrDefaultGeoProcFactory::Make(Color::kPremulGrColorAttribute_Type, Coverage::kSolid_Type,
- LocalCoords::kUsePosition_Type, viewMatrix);
+ return GrDefaultGeoProcFactory::Make(shaderCaps, Color::kPremulGrColorAttribute_Type,
+ Coverage::kSolid_Type, LocalCoords::kUsePosition_Type,
+ viewMatrix);
}
static void tesselate_region(intptr_t vertices,
@@ -109,7 +111,7 @@ public:
private:
void onPrepareDraws(Target* target) override {
- sk_sp<GrGeometryProcessor> gp = make_gp(fViewMatrix);
+ sk_sp<GrGeometryProcessor> gp = make_gp(target->caps().shaderCaps(), fViewMatrix);
if (!gp) {
SkDebugf("Couldn't create GrGeometryProcessor\n");
return;
diff --git a/src/gpu/ops/GrTessellatingPathRenderer.cpp b/src/gpu/ops/GrTessellatingPathRenderer.cpp
index 475197e197..2fea9cb053 100644
--- a/src/gpu/ops/GrTessellatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp
@@ -335,10 +335,12 @@ private:
coverageType = Coverage::kSolid_Type;
}
if (fAntiAlias) {
- gp = GrDefaultGeoProcFactory::MakeForDeviceSpace(color, coverageType,
+ gp = GrDefaultGeoProcFactory::MakeForDeviceSpace(target->caps().shaderCaps(),
+ color, coverageType,
localCoordsType, fViewMatrix);
} else {
- gp = GrDefaultGeoProcFactory::Make(color, coverageType, localCoordsType,
+ gp = GrDefaultGeoProcFactory::Make(target->caps().shaderCaps(),
+ color, coverageType, localCoordsType,
fViewMatrix);
}
}