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

Unified Diff: src/gpu/GrVertices.h

Issue 1806983002: Update how we send draws to gpu backend to reduce state setting. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: nit Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrTest.cpp ('k') | src/gpu/batches/GrAAConvexPathRenderer.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrVertices.h
diff --git a/src/gpu/GrVertices.h b/src/gpu/GrVertices.h
deleted file mode 100644
index 03ede07d154cc2d9ddefad0eef620d9eaa2036c2..0000000000000000000000000000000000000000
--- a/src/gpu/GrVertices.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef GrVertices_DEFINED
-#define GrVertices_DEFINED
-
-#include "GrIndexBuffer.h"
-#include "GrVertexBuffer.h"
-
-class GrNonInstancedVertices {
-public:
- GrPrimitiveType primitiveType() const { return fPrimitiveType; }
- int startVertex() const { return fStartVertex; }
- int startIndex() const { return fStartIndex; }
- int vertexCount() const { return fVertexCount; }
- int indexCount() const { return fIndexCount; }
- bool isIndexed() const { return fIndexCount > 0; }
-
- const GrVertexBuffer* vertexBuffer() const { return fVertexBuffer.get(); }
- const GrIndexBuffer* indexBuffer() const { return fIndexBuffer.get(); }
-
-protected:
- GrPrimitiveType fPrimitiveType;
- int fStartVertex;
- int fStartIndex;
- int fVertexCount;
- int fIndexCount;
- GrPendingIOResource<const GrVertexBuffer, kRead_GrIOType> fVertexBuffer;
- GrPendingIOResource<const GrIndexBuffer, kRead_GrIOType> fIndexBuffer;
- friend class GrVertices;
-};
-
-/**
- * Used to communicate index and vertex buffers, counts, and offsets for a draw from GrBatch to
- * GrGpu. It also holds the primitive type for the draw. TODO: Consider moving ownership of this
- * and draw-issuing responsibility to GrPrimitiveProcessor. The rest of the vertex info lives there
- * already (stride, attribute mappings).
- */
-class GrVertices : public GrNonInstancedVertices {
-public:
- GrVertices() {}
- GrVertices(const GrVertices& di) { (*this) = di; }
- GrVertices& operator =(const GrVertices& di);
-
- void init(GrPrimitiveType primType, const GrVertexBuffer* vertexBuffer, int startVertex,
- int vertexCount) {
- SkASSERT(vertexBuffer);
- SkASSERT(vertexCount);
- SkASSERT(startVertex >= 0);
- fPrimitiveType = primType;
- fVertexBuffer.reset(vertexBuffer);
- fIndexBuffer.reset(nullptr);
- fStartVertex = startVertex;
- fStartIndex = 0;
- fVertexCount = vertexCount;
- fIndexCount = 0;
- fInstanceCount = 0;
- fVerticesPerInstance = 0;
- fIndicesPerInstance = 0;
- fMaxInstancesPerDraw = 0;
- }
-
- void initIndexed(GrPrimitiveType primType,
- const GrVertexBuffer* vertexBuffer,
- const GrIndexBuffer* indexBuffer,
- int startVertex,
- int startIndex,
- int vertexCount,
- int indexCount) {
- SkASSERT(indexBuffer);
- SkASSERT(vertexBuffer);
- SkASSERT(indexCount);
- SkASSERT(vertexCount);
- SkASSERT(startIndex >= 0);
- SkASSERT(startVertex >= 0);
- fPrimitiveType = primType;
- fVertexBuffer.reset(vertexBuffer);
- fIndexBuffer.reset(indexBuffer);
- fStartVertex = startVertex;
- fStartIndex = startIndex;
- fVertexCount = vertexCount;
- fIndexCount = indexCount;
- fInstanceCount = 0;
- fVerticesPerInstance = 0;
- fIndicesPerInstance = 0;
- fMaxInstancesPerDraw = 0;
- }
-
-
- /** Variation of the above that may be used when the total number of instances may exceed
- the number of instances supported by the index buffer. To be used with
- nextInstances() to draw in max-sized batches.*/
- void initInstanced(GrPrimitiveType primType,
- const GrVertexBuffer* vertexBuffer,
- const GrIndexBuffer* indexBuffer,
- int startVertex,
- int verticesPerInstance,
- int indicesPerInstance,
- int instanceCount,
- int maxInstancesPerDraw) {
- SkASSERT(vertexBuffer);
- SkASSERT(indexBuffer);
- SkASSERT(instanceCount);
- SkASSERT(verticesPerInstance);
- SkASSERT(indicesPerInstance);
- SkASSERT(startVertex >= 0);
- fPrimitiveType = primType;
- fVertexBuffer.reset(vertexBuffer);
- fIndexBuffer.reset(indexBuffer);
- fStartVertex = startVertex;
- fStartIndex = 0;
- fVerticesPerInstance = verticesPerInstance;
- fIndicesPerInstance = indicesPerInstance;
- fInstanceCount = instanceCount;
- fVertexCount = instanceCount * fVerticesPerInstance;
- fIndexCount = instanceCount * fIndicesPerInstance;
- fMaxInstancesPerDraw = maxInstancesPerDraw;
- }
-
-
- /** These return 0 if initInstanced was not used to initialize the GrVertices. */
- int verticesPerInstance() const { return fVerticesPerInstance; }
- int indicesPerInstance() const { return fIndicesPerInstance; }
- int instanceCount() const { return fInstanceCount; }
-
- bool isInstanced() const { return fInstanceCount > 0; }
-
- class Iterator {
- public:
- const GrNonInstancedVertices* init(const GrVertices& vertices) {
- fVertices = &vertices;
- if (vertices.fInstanceCount <= vertices.fMaxInstancesPerDraw) {
- fInstancesRemaining = 0;
- // Note, this also covers the non-instanced case!
- return &vertices;
- }
- SkASSERT(vertices.isInstanced());
- fInstanceBatch.fIndexBuffer.reset(vertices.fIndexBuffer.get());
- fInstanceBatch.fVertexBuffer.reset(vertices.fVertexBuffer.get());
- fInstanceBatch.fIndexCount = vertices.fMaxInstancesPerDraw *
- vertices.fIndicesPerInstance;
- fInstanceBatch.fVertexCount = vertices.fMaxInstancesPerDraw *
- vertices.fVerticesPerInstance;
- fInstanceBatch.fPrimitiveType = vertices.fPrimitiveType;
- fInstanceBatch.fStartIndex = vertices.fStartIndex;
- fInstanceBatch.fStartVertex = vertices.fStartVertex;
- fInstancesRemaining = vertices.fInstanceCount - vertices.fMaxInstancesPerDraw;
- return &fInstanceBatch;
- }
-
- const GrNonInstancedVertices* next() {
- if (!fInstancesRemaining) {
- return nullptr;
- }
- fInstanceBatch.fStartVertex += fInstanceBatch.fVertexCount;
- int instances = SkTMin(fInstancesRemaining, fVertices->fMaxInstancesPerDraw);
- fInstanceBatch.fIndexCount = instances * fVertices->fIndicesPerInstance;
- fInstanceBatch.fVertexCount = instances * fVertices->fVerticesPerInstance;
- fInstancesRemaining -= instances;
- return &fInstanceBatch;
- }
- private:
- GrNonInstancedVertices fInstanceBatch;
- const GrVertices* fVertices;
- int fInstancesRemaining;
- };
-
-private:
- int fInstanceCount;
- int fVerticesPerInstance;
- int fIndicesPerInstance;
- int fMaxInstancesPerDraw;
-};
-
-#endif
« no previous file with comments | « src/gpu/GrTest.cpp ('k') | src/gpu/batches/GrAAConvexPathRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698