aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Chris Dalton <csmartdalton@google.com>2017-06-13 10:55:06 -0600
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-13 18:18:23 +0000
commit3809bab7ed344ad140346c38e149dabf10bd525f (patch)
tree4bd274cb01c35b8f996bbb113df5cf684d6b48a7
parentf1debdf2b065cd3ec5f4501d84152366442719c4 (diff)
Add GrPrimitiveType::kLinesAdjacency
Converts GrPrimitiveType to an enum class and adds kLinesAdjacency. Bug: skia: Change-Id: I3b5e68acfb20476f6c6923968f5a4ac4f73ae12d Reviewed-on: https://skia-review.googlesource.com/19680 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Chris Dalton <csmartdalton@google.com>
-rw-r--r--include/gpu/GrTypes.h27
-rw-r--r--src/gpu/GrGpuCommandBuffer.cpp2
-rw-r--r--src/gpu/GrResourceProvider.h2
-rw-r--r--src/gpu/SkGpuDevice.cpp10
-rw-r--r--src/gpu/SkGr.h8
-rw-r--r--src/gpu/gl/GrGLDefines.h3
-rw-r--r--src/gpu/gl/GrGLGpu.cpp40
-rw-r--r--src/gpu/ops/GrAAConvexPathRenderer.cpp4
-rw-r--r--src/gpu/ops/GrAAFillRectOp.cpp2
-rw-r--r--src/gpu/ops/GrAAHairLinePathRenderer.cpp6
-rw-r--r--src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp2
-rw-r--r--src/gpu/ops/GrAAStrokeRectOp.cpp2
-rw-r--r--src/gpu/ops/GrAtlasTextOp.cpp2
-rw-r--r--src/gpu/ops/GrDefaultPathRenderer.cpp8
-rw-r--r--src/gpu/ops/GrDrawVerticesOp.cpp32
-rw-r--r--src/gpu/ops/GrDrawVerticesOp.h10
-rw-r--r--src/gpu/ops/GrLatticeOp.cpp2
-rw-r--r--src/gpu/ops/GrMSAAPathRenderer.cpp6
-rw-r--r--src/gpu/ops/GrMeshDrawOp.h2
-rw-r--r--src/gpu/ops/GrNonAAFillRectOp.cpp4
-rw-r--r--src/gpu/ops/GrNonAAStrokeRectOp.cpp4
-rw-r--r--src/gpu/ops/GrOvalOpFactory.cpp6
-rw-r--r--src/gpu/ops/GrRegionOp.cpp2
-rw-r--r--src/gpu/ops/GrShadowRRectOp.cpp2
-rw-r--r--src/gpu/ops/GrSmallPathRenderer.cpp2
-rw-r--r--src/gpu/ops/GrTessellatingPathRenderer.cpp2
-rw-r--r--src/gpu/vk/GrVkPipeline.cpp31
-rw-r--r--src/gpu/vk/GrVkPipelineState.cpp4
-rw-r--r--tests/GrMeshTest.cpp9
-rw-r--r--tests/GrPipelineDynamicStateTest.cpp2
-rw-r--r--tests/OnFlushCallbackTest.cpp2
31 files changed, 138 insertions, 102 deletions
diff --git a/include/gpu/GrTypes.h b/include/gpu/GrTypes.h
index bad6aa773c..a4988c8a1a 100644
--- a/include/gpu/GrTypes.h
+++ b/include/gpu/GrTypes.h
@@ -216,24 +216,27 @@ static inline GrAA GrBoolToAA(bool aa) { return aa ? GrAA::kYes : GrAA::kNo; }
/**
* Geometric primitives used for drawing.
*/
-enum GrPrimitiveType {
- kTriangles_GrPrimitiveType,
- kTriangleStrip_GrPrimitiveType,
- kTriangleFan_GrPrimitiveType,
- kPoints_GrPrimitiveType,
- kLines_GrPrimitiveType, // 1 pix wide only
- kLineStrip_GrPrimitiveType, // 1 pix wide only
- kLast_GrPrimitiveType = kLineStrip_GrPrimitiveType
+enum class GrPrimitiveType {
+ kTriangles,
+ kTriangleStrip,
+ kTriangleFan,
+ kPoints,
+ kLines, // 1 pix wide only
+ kLineStrip, // 1 pix wide only
+ kLinesAdjacency // requires geometry shader support.
};
+static constexpr int kNumGrPrimitiveTypes = (int) GrPrimitiveType::kLinesAdjacency + 1;
static inline bool GrIsPrimTypeLines(GrPrimitiveType type) {
- return kLines_GrPrimitiveType == type || kLineStrip_GrPrimitiveType == type;
+ return GrPrimitiveType::kLines == type ||
+ GrPrimitiveType::kLineStrip == type ||
+ GrPrimitiveType::kLinesAdjacency == type;
}
static inline bool GrIsPrimTypeTris(GrPrimitiveType type) {
- return kTriangles_GrPrimitiveType == type ||
- kTriangleStrip_GrPrimitiveType == type ||
- kTriangleFan_GrPrimitiveType == type;
+ return GrPrimitiveType::kTriangles == type ||
+ GrPrimitiveType::kTriangleStrip == type ||
+ GrPrimitiveType::kTriangleFan == type;
}
/**
diff --git a/src/gpu/GrGpuCommandBuffer.cpp b/src/gpu/GrGpuCommandBuffer.cpp
index 9659ca3b9a..d9a2fa880b 100644
--- a/src/gpu/GrGpuCommandBuffer.cpp
+++ b/src/gpu/GrGpuCommandBuffer.cpp
@@ -45,6 +45,8 @@ bool GrGpuCommandBuffer::draw(const GrPipeline& pipeline,
#ifdef SK_DEBUG
SkASSERT(!primProc.hasInstanceAttribs() || this->gpu()->caps()->instanceAttribSupport());
for (int i = 0; i < meshCount; ++i) {
+ SkASSERT(GrPrimitiveType::kLinesAdjacency != meshes[i].primitiveType() ||
+ this->gpu()->caps()->shaderCaps()->geometryShaderSupport());
SkASSERT(primProc.hasVertexAttribs() == meshes[i].hasVertexData());
SkASSERT(primProc.hasInstanceAttribs() == meshes[i].isInstanced());
}
diff --git a/src/gpu/GrResourceProvider.h b/src/gpu/GrResourceProvider.h
index 1e0146ab07..c2cb6dce9d 100644
--- a/src/gpu/GrResourceProvider.h
+++ b/src/gpu/GrResourceProvider.h
@@ -138,7 +138,7 @@ public:
* Returns an index buffer that can be used to render quads.
* Six indices per quad: 0, 1, 2, 0, 2, 3, etc.
* The max number of quads is the buffer's index capacity divided by 6.
- * Draw with kTriangles_GrPrimitiveType
+ * Draw with GrPrimitiveType::kTriangles
* @ return the quad index buffer
*/
const GrBuffer* refQuadIndexBuffer() {
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 28cb5f8c53..09467a1809 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -291,9 +291,9 @@ void SkGpuDevice::drawPaint(const SkPaint& paint) {
// must be in SkCanvas::PointMode order
static const GrPrimitiveType gPointMode2PrimitiveType[] = {
- kPoints_GrPrimitiveType,
- kLines_GrPrimitiveType,
- kLineStrip_GrPrimitiveType
+ GrPrimitiveType::kPoints,
+ GrPrimitiveType::kLines,
+ GrPrimitiveType::kLineStrip
};
void SkGpuDevice::drawPoints(SkCanvas::PointMode mode,
@@ -346,7 +346,7 @@ void SkGpuDevice::drawPoints(SkCanvas::PointMode mode,
// This offsetting in device space matches the expectations of the Android framework for non-AA
// points and lines.
SkMatrix tempMatrix;
- if (GrIsPrimTypeLines(primitiveType) || kPoints_GrPrimitiveType == primitiveType) {
+ if (GrIsPrimTypeLines(primitiveType) || GrPrimitiveType::kPoints == primitiveType) {
tempMatrix = *viewMatrix;
static const SkScalar kOffset = 0.063f; // Just greater than 1/16.
tempMatrix.postTranslate(kOffset, kOffset);
@@ -1597,7 +1597,7 @@ void SkGpuDevice::wireframeVertices(SkVertices::VertexMode vmode, int vertexCoun
i += 6;
}
- GrPrimitiveType primitiveType = kLines_GrPrimitiveType;
+ GrPrimitiveType primitiveType = GrPrimitiveType::kLines;
fRenderTargetContext->drawVertices(this->clip(),
std::move(grPaint),
this->ctm(),
diff --git a/src/gpu/SkGr.h b/src/gpu/SkGr.h
index 7232c801d9..090a384b4a 100644
--- a/src/gpu/SkGr.h
+++ b/src/gpu/SkGr.h
@@ -165,14 +165,14 @@ GrSamplerParams::FilterMode GrSkFilterQualityToGrFilterMode(SkFilterQuality pain
static inline GrPrimitiveType SkVertexModeToGrPrimitiveType(SkVertices::VertexMode mode) {
switch (mode) {
case SkVertices::kTriangles_VertexMode:
- return kTriangles_GrPrimitiveType;
+ return GrPrimitiveType::kTriangles;
case SkVertices::kTriangleStrip_VertexMode:
- return kTriangleStrip_GrPrimitiveType;
+ return GrPrimitiveType::kTriangleStrip;
case SkVertices::kTriangleFan_VertexMode:
- return kTriangleFan_GrPrimitiveType;
+ return GrPrimitiveType::kTriangleFan;
}
SkFAIL("Invalid mode");
- return kPoints_GrPrimitiveType;
+ return GrPrimitiveType::kPoints;
}
//////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/gl/GrGLDefines.h b/src/gpu/gl/GrGLDefines.h
index f3c5f5c99a..a986ce80c3 100644
--- a/src/gpu/gl/GrGLDefines.h
+++ b/src/gpu/gl/GrGLDefines.h
@@ -1062,6 +1062,9 @@
#define GR_GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
#define GR_GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
+/* GL_EXT_geometry_shader */
+#define GR_GL_LINES_ADJACENCY 0x000A
+
/* EGL Defines */
#define GR_EGL_NO_DISPLAY ((GrEGLDisplay)0)
#define GR_EGL_EXTENSIONS 0x3055
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index a6fafbed5b..b3f8c2caa8 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -2426,15 +2426,6 @@ void GrGLGpu::flushViewport(const GrGLIRect& viewport) {
}
}
-GrGLenum gPrimitiveType2GLMode[] = {
- GR_GL_TRIANGLES,
- GR_GL_TRIANGLE_STRIP,
- GR_GL_TRIANGLE_FAN,
- GR_GL_POINTS,
- GR_GL_LINES,
- GR_GL_LINE_STRIP
-};
-
#define SWAP_PER_DRAW 0
#if SWAP_PER_DRAW
@@ -2466,7 +2457,7 @@ void GrGLGpu::draw(const GrPipeline& pipeline,
bool hasPoints = false;
for (int i = 0; i < meshCount; ++i) {
- if (meshes[i].primitiveType() == kPoints_GrPrimitiveType) {
+ if (meshes[i].primitiveType() == GrPrimitiveType::kPoints) {
hasPoints = true;
break;
}
@@ -2511,9 +2502,30 @@ void GrGLGpu::draw(const GrPipeline& pipeline,
#endif
}
+static GrGLenum gr_primitive_type_to_gl_mode(GrPrimitiveType primitiveType) {
+ switch (primitiveType) {
+ case GrPrimitiveType::kTriangles:
+ return GR_GL_TRIANGLES;
+ case GrPrimitiveType::kTriangleStrip:
+ return GR_GL_TRIANGLE_STRIP;
+ case GrPrimitiveType::kTriangleFan:
+ return GR_GL_TRIANGLE_FAN;
+ case GrPrimitiveType::kPoints:
+ return GR_GL_POINTS;
+ case GrPrimitiveType::kLines:
+ return GR_GL_LINES;
+ case GrPrimitiveType::kLineStrip:
+ return GR_GL_LINE_STRIP;
+ case GrPrimitiveType::kLinesAdjacency:
+ return GR_GL_LINES_ADJACENCY;
+ }
+ SkFAIL("invalid GrPrimitiveType");
+ return GR_GL_TRIANGLES;
+}
+
void GrGLGpu::sendMeshToGpu(const GrPrimitiveProcessor& primProc, GrPrimitiveType primitiveType,
const GrBuffer* vertexBuffer, int vertexCount, int baseVertex) {
- const GrGLenum glPrimType = gPrimitiveType2GLMode[primitiveType];
+ const GrGLenum glPrimType = gr_primitive_type_to_gl_mode(primitiveType);
if (this->glCaps().drawArraysBaseVertexIsBroken()) {
this->setupGeometry(primProc, nullptr, vertexBuffer, baseVertex, nullptr, 0);
GL_CALL(DrawArrays(glPrimType, 0, vertexCount));
@@ -2529,7 +2541,7 @@ void GrGLGpu::sendIndexedMeshToGpu(const GrPrimitiveProcessor& primProc,
int indexCount, int baseIndex, uint16_t minIndexValue,
uint16_t maxIndexValue, const GrBuffer* vertexBuffer,
int baseVertex) {
- const GrGLenum glPrimType = gPrimitiveType2GLMode[primitiveType];
+ const GrGLenum glPrimType = gr_primitive_type_to_gl_mode(primitiveType);
GrGLvoid* const indices = reinterpret_cast<void*>(indexBuffer->baseOffset() +
sizeof(uint16_t) * baseIndex);
@@ -2549,7 +2561,7 @@ void GrGLGpu::sendInstancedMeshToGpu(const GrPrimitiveProcessor& primProc, GrPri
int vertexCount, int baseVertex,
const GrBuffer* instanceBuffer, int instanceCount,
int baseInstance) {
- const GrGLenum glPrimType = gPrimitiveType2GLMode[primitiveType];
+ const GrGLenum glPrimType = gr_primitive_type_to_gl_mode(primitiveType);
this->setupGeometry(primProc, nullptr, vertexBuffer, 0, instanceBuffer, baseInstance);
GL_CALL(DrawArraysInstanced(glPrimType, baseVertex, vertexCount, instanceCount));
fStats.incNumDraws();
@@ -2561,7 +2573,7 @@ void GrGLGpu::sendIndexedInstancedMeshToGpu(const GrPrimitiveProcessor& primProc
int baseIndex, const GrBuffer* vertexBuffer,
int baseVertex, const GrBuffer* instanceBuffer,
int instanceCount, int baseInstance) {
- const GrGLenum glPrimType = gPrimitiveType2GLMode[primitiveType];
+ const GrGLenum glPrimType = gr_primitive_type_to_gl_mode(primitiveType);
GrGLvoid* indices = reinterpret_cast<void*>(indexBuffer->baseOffset() +
sizeof(uint16_t) * baseIndex);
this->setupGeometry(primProc, indexBuffer, vertexBuffer, baseVertex,
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index cd69c6acd4..9125300e21 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -812,7 +812,7 @@ private:
extract_verts(tess, verts, vertexStride, fColor, idxs, canTweakAlphaForCoverage);
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexed(indexBuffer, tess.numIndices(), firstIndex, 0, tess.numPts() - 1);
mesh.setVertexData(vertexBuffer, firstVertex);
target->draw(gp.get(), this->pipeline(), mesh);
@@ -897,7 +897,7 @@ private:
SkSTArray<kPreallocDrawCnt, Draw, true> draws;
create_vertices(segments, fanPt, &draws, verts, idxs);
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
for (int j = 0; j < draws.count(); ++j) {
const Draw& draw = draws[j];
diff --git a/src/gpu/ops/GrAAFillRectOp.cpp b/src/gpu/ops/GrAAFillRectOp.cpp
index 364c2218e4..af5885c34f 100644
--- a/src/gpu/ops/GrAAFillRectOp.cpp
+++ b/src/gpu/ops/GrAAFillRectOp.cpp
@@ -231,7 +231,7 @@ private:
size_t vertexStride = gp->getVertexStride();
sk_sp<const GrBuffer> indexBuffer(get_index_buffer(target->resourceProvider()));
- PatternHelper helper(kTriangles_GrPrimitiveType);
+ PatternHelper helper(GrPrimitiveType::kTriangles);
void* vertices =
helper.init(target, vertexStride, indexBuffer.get(), kVertsPerAAFillRect,
kIndicesPerAAFillRect, fRectCnt);
diff --git a/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
index 26d58f4a95..4d4b74f89b 100644
--- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
@@ -860,7 +860,7 @@ void AAHairlineOp::onPrepareDraws(Target* target) const {
add_line(&lines[2*i], toSrc, this->coverage(), &verts);
}
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexedPatterned(linesIndexBuffer.get(), kIdxsPerLineSeg, kLineSegNumVertices,
lineCount, kLineSegsNumInIdxBuffer);
mesh.setVertexData(vertexBuffer, firstVertex);
@@ -917,7 +917,7 @@ void AAHairlineOp::onPrepareDraws(Target* target) const {
}
if (quadCount > 0) {
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexedPatterned(quadsIndexBuffer.get(), kIdxsPerQuad, kQuadNumVertices,
quadCount, kQuadsNumInIdxBuffer);
mesh.setVertexData(vertexBuffer, firstVertex);
@@ -926,7 +926,7 @@ void AAHairlineOp::onPrepareDraws(Target* target) const {
}
if (conicCount > 0) {
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexedPatterned(quadsIndexBuffer.get(), kIdxsPerQuad, kQuadNumVertices,
conicCount, kQuadsNumInIdxBuffer);
mesh.setVertexData(vertexBuffer, firstVertex);
diff --git a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
index 5cfe5cbfed..9df9d678ec 100644
--- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
@@ -190,7 +190,7 @@ private:
return;
}
const GrBuffer* vertexBuffer;
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
int firstVertex;
void* verts = target->makeVertexSpace(vertexStride, vertexCount, &vertexBuffer,
&firstVertex);
diff --git a/src/gpu/ops/GrAAStrokeRectOp.cpp b/src/gpu/ops/GrAAStrokeRectOp.cpp
index 7ec8b86aa8..7af6c3e58e 100644
--- a/src/gpu/ops/GrAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrAAStrokeRectOp.cpp
@@ -262,7 +262,7 @@ void AAStrokeRectOp::onPrepareDraws(Target* target) const {
const sk_sp<const GrBuffer> indexBuffer(
GetIndexBuffer(target->resourceProvider(), this->miterStroke()));
- PatternHelper helper(kTriangles_GrPrimitiveType);
+ PatternHelper helper(GrPrimitiveType::kTriangles);
void* vertices =
helper.init(target, vertexStride, indexBuffer.get(),
verticesPerInstance, indicesPerInstance, instanceCount);
diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp
index 2f2def662a..c854a8b54d 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -139,7 +139,7 @@ void GrAtlasTextOp::onPrepareDraws(Target* target) const {
}
void GrAtlasTextOp::flush(GrLegacyMeshDrawOp::Target* target, FlushInfo* flushInfo) const {
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
int maxGlyphsPerDraw =
static_cast<int>(flushInfo->fIndexBuffer->gpuMemorySize() / sizeof(uint16_t) / 6);
mesh.setIndexedPatterned(flushInfo->fIndexBuffer.get(), kIndicesPerGlyph, kVerticesPerGlyph,
diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp
index c282036971..bc5702b393 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.cpp
+++ b/src/gpu/ops/GrDefaultPathRenderer.cpp
@@ -184,16 +184,16 @@ private:
if (this->isHairline()) {
if (isIndexed) {
maxIndices = 2 * maxVertices;
- primitiveType = kLines_GrPrimitiveType;
+ primitiveType = GrPrimitiveType::kLines;
} else {
- primitiveType = kLineStrip_GrPrimitiveType;
+ primitiveType = GrPrimitiveType::kLineStrip;
}
} else {
if (isIndexed) {
maxIndices = 3 * maxVertices;
- primitiveType = kTriangles_GrPrimitiveType;
+ primitiveType = GrPrimitiveType::kTriangles;
} else {
- primitiveType = kTriangleFan_GrPrimitiveType;
+ primitiveType = GrPrimitiveType::kTriangleFan;
}
}
diff --git a/src/gpu/ops/GrDrawVerticesOp.cpp b/src/gpu/ops/GrDrawVerticesOp.cpp
index a83b3e07b9..ecc75a7f4b 100644
--- a/src/gpu/ops/GrDrawVerticesOp.cpp
+++ b/src/gpu/ops/GrDrawVerticesOp.cpp
@@ -58,7 +58,7 @@ GrDrawVerticesOp::GrDrawVerticesOp(sk_sp<SkVertices> vertices, GrPrimitiveType p
}
IsZeroArea zeroArea;
- if (GrIsPrimTypeLines(primitiveType) || kPoints_GrPrimitiveType == primitiveType) {
+ if (GrIsPrimTypeLines(primitiveType) || GrPrimitiveType::kPoints == primitiveType) {
zeroArea = IsZeroArea::kYes;
} else {
zeroArea = IsZeroArea::kNo;
@@ -300,15 +300,17 @@ bool GrDrawVerticesOp::onCombineIfPossible(GrOp* t, const GrCaps& caps) {
static uint32_t seed_vertices(GrPrimitiveType type) {
switch (type) {
- case kTriangles_GrPrimitiveType:
- case kTriangleStrip_GrPrimitiveType:
- case kTriangleFan_GrPrimitiveType:
+ case GrPrimitiveType::kTriangles:
+ case GrPrimitiveType::kTriangleStrip:
+ case GrPrimitiveType::kTriangleFan:
return 3;
- case kPoints_GrPrimitiveType:
+ case GrPrimitiveType::kPoints:
return 1;
- case kLines_GrPrimitiveType:
- case kLineStrip_GrPrimitiveType:
+ case GrPrimitiveType::kLines:
+ case GrPrimitiveType::kLineStrip:
return 2;
+ case GrPrimitiveType::kLinesAdjacency:
+ return 4;
}
SkFAIL("Incomplete switch\n");
return 0;
@@ -316,15 +318,17 @@ static uint32_t seed_vertices(GrPrimitiveType type) {
static uint32_t primitive_vertices(GrPrimitiveType type) {
switch (type) {
- case kTriangles_GrPrimitiveType:
+ case GrPrimitiveType::kTriangles:
return 3;
- case kLines_GrPrimitiveType:
+ case GrPrimitiveType::kLines:
return 2;
- case kTriangleStrip_GrPrimitiveType:
- case kTriangleFan_GrPrimitiveType:
- case kPoints_GrPrimitiveType:
- case kLineStrip_GrPrimitiveType:
+ case GrPrimitiveType::kTriangleStrip:
+ case GrPrimitiveType::kTriangleFan:
+ case GrPrimitiveType::kPoints:
+ case GrPrimitiveType::kLineStrip:
return 1;
+ case GrPrimitiveType::kLinesAdjacency:
+ return 4;
}
SkFAIL("Incomplete switch\n");
return 0;
@@ -358,7 +362,7 @@ static void randomize_params(size_t count, size_t maxVertex, SkScalar min, SkSca
}
GR_LEGACY_MESH_DRAW_OP_TEST_DEFINE(VerticesOp) {
- GrPrimitiveType type = GrPrimitiveType(random->nextULessThan(kLast_GrPrimitiveType + 1));
+ GrPrimitiveType type = GrPrimitiveType(random->nextULessThan(kNumGrPrimitiveTypes));
uint32_t primitiveCount = random->nextRangeU(1, 100);
// TODO make 'sensible' indexbuffers
diff --git a/src/gpu/ops/GrDrawVerticesOp.h b/src/gpu/ops/GrDrawVerticesOp.h
index 1d788ab15c..4ff19cc4c2 100644
--- a/src/gpu/ops/GrDrawVerticesOp.h
+++ b/src/gpu/ops/GrDrawVerticesOp.h
@@ -45,8 +45,8 @@ public:
SkString dumpInfo() const override {
SkString string;
- string.appendf("PrimType: %d, MeshCount %d, VCount: %d, ICount: %d\n", fPrimitiveType,
- fMeshes.count(), fVertexCount, fIndexCount);
+ string.appendf("PrimType: %d, MeshCount %d, VCount: %d, ICount: %d\n",
+ (int) fPrimitiveType, fMeshes.count(), fVertexCount, fIndexCount);
string.append(DumpPipelineInfo(*this->pipeline()));
string.append(INHERITED::dumpInfo());
return string;
@@ -70,9 +70,9 @@ private:
GrPrimitiveType primitiveType() const { return fPrimitiveType; }
bool combinablePrimitive() const {
- return kTriangles_GrPrimitiveType == fPrimitiveType ||
- kLines_GrPrimitiveType == fPrimitiveType ||
- kPoints_GrPrimitiveType == fPrimitiveType;
+ return GrPrimitiveType::kTriangles == fPrimitiveType ||
+ GrPrimitiveType::kLines == fPrimitiveType ||
+ GrPrimitiveType::kPoints == fPrimitiveType;
}
bool onCombineIfPossible(GrOp* t, const GrCaps&) override;
diff --git a/src/gpu/ops/GrLatticeOp.cpp b/src/gpu/ops/GrLatticeOp.cpp
index effab8cdcf..50b957cd21 100644
--- a/src/gpu/ops/GrLatticeOp.cpp
+++ b/src/gpu/ops/GrLatticeOp.cpp
@@ -86,7 +86,7 @@ private:
}
sk_sp<const GrBuffer> indexBuffer(target->resourceProvider()->refQuadIndexBuffer());
- PatternHelper helper(kTriangles_GrPrimitiveType);
+ PatternHelper helper(GrPrimitiveType::kTriangles);
void* vertices = helper.init(target, vertexStride, indexBuffer.get(), kVertsPerRect,
kIndicesPerRect, numRects);
if (!vertices || !indexBuffer) {
diff --git a/src/gpu/ops/GrMSAAPathRenderer.cpp b/src/gpu/ops/GrMSAAPathRenderer.cpp
index 50a839d7b0..ef64ecfe7d 100644
--- a/src/gpu/ops/GrMSAAPathRenderer.cpp
+++ b/src/gpu/ops/GrMSAAPathRenderer.cpp
@@ -330,8 +330,8 @@ private:
return;
}
- GrPrimitiveType primitiveType = fIsIndexed ? kTriangles_GrPrimitiveType
- : kTriangleFan_GrPrimitiveType;
+ GrPrimitiveType primitiveType = fIsIndexed ? GrPrimitiveType::kTriangles
+ : GrPrimitiveType::kTriangleFan;
// allocate vertex / index buffers
const GrBuffer* lineVertexBuffer;
@@ -437,7 +437,7 @@ private:
target->makeVertexSpace(quadVertexStride, quadVertexOffset, &quadVertexBuffer,
&firstQuadVertex);
memcpy(quadVertices, quads.vertices, quadVertexStride * quadVertexOffset);
- GrMesh quadMeshes(kTriangles_GrPrimitiveType);
+ GrMesh quadMeshes(GrPrimitiveType::kTriangles);
if (!fIsIndexed) {
quadMeshes.setNonIndexedNonInstanced(quadVertexOffset);
} else {
diff --git a/src/gpu/ops/GrMeshDrawOp.h b/src/gpu/ops/GrMeshDrawOp.h
index 178ca2986b..349e8b6bda 100644
--- a/src/gpu/ops/GrMeshDrawOp.h
+++ b/src/gpu/ops/GrMeshDrawOp.h
@@ -52,7 +52,7 @@ protected:
/** A specialization of InstanceHelper for quad rendering. */
class QuadHelper : private PatternHelper {
public:
- QuadHelper() : INHERITED(kTriangles_GrPrimitiveType) {}
+ QuadHelper() : INHERITED(GrPrimitiveType::kTriangles) {}
/** Finds the cached quad index buffer and reserves vertex space. Returns nullptr on failure
and on success a pointer to the vertex data that the caller should populate before
calling recordDraws(). */
diff --git a/src/gpu/ops/GrNonAAFillRectOp.cpp b/src/gpu/ops/GrNonAAFillRectOp.cpp
index 32e77da52b..defc7907b9 100644
--- a/src/gpu/ops/GrNonAAFillRectOp.cpp
+++ b/src/gpu/ops/GrNonAAFillRectOp.cpp
@@ -175,7 +175,7 @@ private:
int rectCount = fRects.count();
sk_sp<const GrBuffer> indexBuffer(target->resourceProvider()->refQuadIndexBuffer());
- PatternHelper helper(kTriangles_GrPrimitiveType);
+ PatternHelper helper(GrPrimitiveType::kTriangles);
void* vertices = helper.init(target, vertexStride, indexBuffer.get(), kVertsPerRect,
kIndicesPerRect, rectCount);
if (!vertices || !indexBuffer) {
@@ -296,7 +296,7 @@ private:
int rectCount = fRects.count();
sk_sp<const GrBuffer> indexBuffer(target->resourceProvider()->refQuadIndexBuffer());
- PatternHelper helper(kTriangles_GrPrimitiveType);
+ PatternHelper helper(GrPrimitiveType::kTriangles);
void* vertices = helper.init(target, vertexStride, indexBuffer.get(), kVertsPerRect,
kIndicesPerRect, rectCount);
if (!vertices || !indexBuffer) {
diff --git a/src/gpu/ops/GrNonAAStrokeRectOp.cpp b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
index eee8120eff..94dc373fc6 100644
--- a/src/gpu/ops/GrNonAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
@@ -144,11 +144,11 @@ private:
GrPrimitiveType primType;
if (fStrokeWidth > 0) {
- primType = kTriangleStrip_GrPrimitiveType;
+ primType = GrPrimitiveType::kTriangleStrip;
init_stroke_rect_strip(vertex, fRect, fStrokeWidth);
} else {
// hairline
- primType = kLineStrip_GrPrimitiveType;
+ primType = GrPrimitiveType::kLineStrip;
vertex[0].set(fRect.fLeft, fRect.fTop);
vertex[1].set(fRect.fRight, fRect.fTop);
vertex[2].set(fRect.fRight, fRect.fBottom);
diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp
index 2b9d1c8e56..15c2569334 100644
--- a/src/gpu/ops/GrOvalOpFactory.cpp
+++ b/src/gpu/ops/GrOvalOpFactory.cpp
@@ -1082,7 +1082,7 @@ private:
vertices += circle_type_to_vert_count(circle.fStroked) * vertexStride;
}
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexed(indexBuffer, fIndexCount, firstIndex, 0, fVertCount - 1);
mesh.setVertexData(vertexBuffer, firstVertex);
target->draw(gp.get(), fHelper.makePipeline(target), mesh);
@@ -1987,7 +1987,7 @@ private:
currStartVertex += rrect_type_to_vert_count(rrect.fType);
}
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexed(indexBuffer, fIndexCount, firstIndex, 0, fVertCount - 1);
mesh.setVertexData(vertexBuffer, firstVertex);
target->draw(gp.get(), fHelper.makePipeline(target), mesh);
@@ -2177,7 +2177,7 @@ private:
sk_sp<const GrBuffer> indexBuffer(ref_rrect_index_buffer(
fStroked ? kStroke_RRectType : kFill_RRectType, target->resourceProvider()));
- PatternHelper helper(kTriangles_GrPrimitiveType);
+ PatternHelper helper(GrPrimitiveType::kTriangles);
EllipseVertex* verts = reinterpret_cast<EllipseVertex*>(
helper.init(target, vertexStride, indexBuffer.get(), kVertsPerStandardRRect,
indicesPerInstance, fRRects.count()));
diff --git a/src/gpu/ops/GrRegionOp.cpp b/src/gpu/ops/GrRegionOp.cpp
index 62d7362635..3920b02437 100644
--- a/src/gpu/ops/GrRegionOp.cpp
+++ b/src/gpu/ops/GrRegionOp.cpp
@@ -103,7 +103,7 @@ private:
size_t vertexStride = gp->getVertexStride();
sk_sp<const GrBuffer> indexBuffer(target->resourceProvider()->refQuadIndexBuffer());
- PatternHelper helper(kTriangles_GrPrimitiveType);
+ PatternHelper helper(GrPrimitiveType::kTriangles);
void* vertices =
helper.init(target, vertexStride, indexBuffer.get(), kVertsPerInstance,
kIndicesPerInstance, numRects);
diff --git a/src/gpu/ops/GrShadowRRectOp.cpp b/src/gpu/ops/GrShadowRRectOp.cpp
index af41bd48ee..13cfc4dd8b 100644
--- a/src/gpu/ops/GrShadowRRectOp.cpp
+++ b/src/gpu/ops/GrShadowRRectOp.cpp
@@ -628,7 +628,7 @@ private:
}
}
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexed(indexBuffer, fIndexCount, firstIndex, 0, fVertCount - 1);
mesh.setVertexData(vertexBuffer, firstVertex);
target->draw(gp.get(), this->pipeline(), mesh);
diff --git a/src/gpu/ops/GrSmallPathRenderer.cpp b/src/gpu/ops/GrSmallPathRenderer.cpp
index d9f5037bb7..f3c43f2071 100644
--- a/src/gpu/ops/GrSmallPathRenderer.cpp
+++ b/src/gpu/ops/GrSmallPathRenderer.cpp
@@ -676,7 +676,7 @@ private:
void flush(GrLegacyMeshDrawOp::Target* target, FlushInfo* flushInfo) const {
if (flushInfo->fInstancesToFlush) {
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
int maxInstancesPerDraw =
static_cast<int>(flushInfo->fIndexBuffer->gpuMemorySize() / sizeof(uint16_t) / 6);
mesh.setIndexedPatterned(flushInfo->fIndexBuffer.get(), kIndicesPerQuad,
diff --git a/src/gpu/ops/GrTessellatingPathRenderer.cpp b/src/gpu/ops/GrTessellatingPathRenderer.cpp
index 27de8f2e5f..7637af04a8 100644
--- a/src/gpu/ops/GrTessellatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp
@@ -313,7 +313,7 @@ private:
void drawVertices(Target* target, const GrGeometryProcessor* gp, const GrBuffer* vb,
int firstVertex, int count) const {
- GrMesh mesh(TESSELLATOR_WIREFRAME ? kLines_GrPrimitiveType : kTriangles_GrPrimitiveType);
+ GrMesh mesh(TESSELLATOR_WIREFRAME ? GrPrimitiveType::kLines : GrPrimitiveType::kTriangles);
mesh.setNonIndexedNonInstanced(count);
mesh.setVertexData(vb, firstVertex);
target->draw(gp, this->pipeline(), mesh);
diff --git a/src/gpu/vk/GrVkPipeline.cpp b/src/gpu/vk/GrVkPipeline.cpp
index 0b4289edec..567d6e89f6 100644
--- a/src/gpu/vk/GrVkPipeline.cpp
+++ b/src/gpu/vk/GrVkPipeline.cpp
@@ -94,24 +94,35 @@ static void setup_vertex_input_state(const GrPrimitiveProcessor& primProc,
vertexInputInfo->pVertexAttributeDescriptions = attributeDesc;
}
+static VkPrimitiveTopology gr_primitive_type_to_vk_topology(GrPrimitiveType primitiveType) {
+ switch (primitiveType) {
+ case GrPrimitiveType::kTriangles:
+ return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+ case GrPrimitiveType::kTriangleStrip:
+ return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP;
+ case GrPrimitiveType::kTriangleFan:
+ return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN;
+ case GrPrimitiveType::kPoints:
+ return VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
+ case GrPrimitiveType::kLines:
+ return VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
+ case GrPrimitiveType::kLineStrip:
+ return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP;
+ case GrPrimitiveType::kLinesAdjacency:
+ return VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY;
+ }
+ SkFAIL("invalid GrPrimitiveType");
+ return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+}
static void setup_input_assembly_state(GrPrimitiveType primitiveType,
VkPipelineInputAssemblyStateCreateInfo* inputAssemblyInfo) {
- static const VkPrimitiveTopology gPrimitiveType2VkTopology[] = {
- VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
- VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
- VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
- VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
- VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
- VK_PRIMITIVE_TOPOLOGY_LINE_STRIP
- };
-
memset(inputAssemblyInfo, 0, sizeof(VkPipelineInputAssemblyStateCreateInfo));
inputAssemblyInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
inputAssemblyInfo->pNext = nullptr;
inputAssemblyInfo->flags = 0;
inputAssemblyInfo->primitiveRestartEnable = false;
- inputAssemblyInfo->topology = gPrimitiveType2VkTopology[primitiveType];
+ inputAssemblyInfo->topology = gr_primitive_type_to_vk_topology(primitiveType);
}
diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp
index 525d75f3da..eb4a516343 100644
--- a/src/gpu/vk/GrVkPipelineState.cpp
+++ b/src/gpu/vk/GrVkPipelineState.cpp
@@ -570,7 +570,7 @@ bool GrVkPipelineState::Desc::Build(Desc* desc,
const GrStencilSettings& stencil,
GrPrimitiveType primitiveType,
const GrShaderCaps& caps) {
- if (!INHERITED::Build(desc, primProc, primitiveType == kPoints_GrPrimitiveType, pipeline,
+ if (!INHERITED::Build(desc, primProc, primitiveType == GrPrimitiveType::kPoints, pipeline,
caps)) {
return false;
}
@@ -583,7 +583,7 @@ bool GrVkPipelineState::Desc::Build(Desc* desc,
b.add32(get_blend_info_key(pipeline));
- b.add32(primitiveType);
+ b.add32((uint32_t)primitiveType);
return true;
}
diff --git a/tests/GrMeshTest.cpp b/tests/GrMeshTest.cpp
index dd2a2d9e33..0811982a54 100644
--- a/tests/GrMeshTest.cpp
+++ b/tests/GrMeshTest.cpp
@@ -147,7 +147,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) {
auto vbuff = helper->makeVertexBuffer(expandedVertexData);
VALIDATE(vbuff);
for (int y = 0; y < kBoxCountY; ++y) {
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setNonIndexedNonInstanced(kBoxCountX * 6);
mesh.setVertexData(vbuff.get(), y * kBoxCountX * 6);
helper->drawMesh(mesh);
@@ -167,7 +167,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) {
GR_STATIC_ASSERT(kIndexPatternRepeatCount >= 3);
int repetitionCount = SkTMin(3 - baseRepetition, kBoxCount - i);
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexed(ibuff.get(), repetitionCount * 6, baseRepetition * 6,
baseRepetition * 4, (baseRepetition + repetitionCount) * 4 - 1);
mesh.setVertexData(vbuff.get(), (i - baseRepetition) * 4);
@@ -187,7 +187,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) {
// Draw boxes one line at a time to exercise base vertex. setIndexedPatterned does not
// support a base index.
for (int y = 0; y < kBoxCountY; ++y) {
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexedPatterned(ibuff.get(), 6, 4, kBoxCountX, kIndexPatternRepeatCount);
mesh.setVertexData(vbuff.get(), y * kBoxCountX * 4);
helper->drawMesh(mesh);
@@ -213,7 +213,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) {
// Draw boxes one line at a time to exercise base instance, base vertex, and null vertex
// buffer. setIndexedInstanced intentionally does not support a base index.
for (int y = 0; y < kBoxCountY; ++y) {
- GrMesh mesh(indexed ? kTriangles_GrPrimitiveType : kTriangleStrip_GrPrimitiveType);
+ GrMesh mesh(indexed ? GrPrimitiveType::kTriangles
+ : GrPrimitiveType::kTriangleStrip);
if (indexed) {
VALIDATE(idxbuff);
mesh.setIndexedInstanced(idxbuff.get(), 6,
diff --git a/tests/GrPipelineDynamicStateTest.cpp b/tests/GrPipelineDynamicStateTest.cpp
index 4c5843aeb1..f3dd27316d 100644
--- a/tests/GrPipelineDynamicStateTest.cpp
+++ b/tests/GrPipelineDynamicStateTest.cpp
@@ -126,7 +126,7 @@ private:
GrPipeline pipeline(rt, fScissorState, SkBlendMode::kSrc);
SkSTArray<kNumMeshes, GrMesh> meshes;
for (int i = 0; i < kNumMeshes; ++i) {
- GrMesh& mesh = meshes.emplace_back(kTriangleStrip_GrPrimitiveType);
+ GrMesh& mesh = meshes.emplace_back(GrPrimitiveType::kTriangleStrip);
mesh.setNonIndexedNonInstanced(4);
mesh.setVertexData(fVertexBuffer.get(), 4 * i);
}
diff --git a/tests/OnFlushCallbackTest.cpp b/tests/OnFlushCallbackTest.cpp
index f8026e816a..f8198687cb 100644
--- a/tests/OnFlushCallbackTest.cpp
+++ b/tests/OnFlushCallbackTest.cpp
@@ -144,7 +144,7 @@ private:
}
}
- GrMesh mesh(kTriangles_GrPrimitiveType);
+ GrMesh mesh(GrPrimitiveType::kTriangles);
mesh.setIndexed(indexBuffer, 6, firstIndex, 0, 3);
mesh.setVertexData(vertexBuffer, firstVertex);