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

Unified Diff: src/gpu/GrOptDrawState.h

Issue 508663002: Create an optimized draw state but not hooked in yet to gpu pipeline (Closed) Base URL: https://skia.googlesource.com/skia.git@drawBase
Patch Set: Nits Created 6 years, 3 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/GrDrawState.cpp ('k') | src/gpu/GrOptDrawState.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrOptDrawState.h
diff --git a/src/gpu/GrOptDrawState.h b/src/gpu/GrOptDrawState.h
new file mode 100644
index 0000000000000000000000000000000000000000..a4edc01c8a465cdf3a510dc10af7b2811fddb8c7
--- /dev/null
+++ b/src/gpu/GrOptDrawState.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrOptDrawState_DEFINED
+#define GrOptDrawState_DEFINED
+
+#include "GrRODrawState.h"
+
+class GrDrawState;
+
+/**
+ * Subclass of GrRODrawState that holds an optimized version of a GrDrawState. Like it's parent
+ * it is meant to be an immutable class, and simply adds a few helpful data members not in the
+ * base class.
+ */
+class GrOptDrawState : public GrRODrawState {
+public:
+ /**
+ * Constructs and optimized drawState out of a GrRODrawState.
+ */
+ explicit GrOptDrawState(const GrDrawState& drawState);
+
+ bool operator== (const GrOptDrawState& that) const;
+
+private:
+ /*
+ * Loops through all the color stage effects to check if the stage will ignore color input or
+ * always output a constant color. In the ignore color input case we can ignore all previous
+ * stages. In the constant color case, we can ignore all previous stages and
+ * the current one and set the state color to the constant color. Once we determine the so
+ * called first effective stage, we copy all the effective stages into our optimized
+ * state.
+ */
+ void copyEffectiveColorStages(const GrDrawState& ds);
+
+ /*
+ * Loops through all the coverage stage effects to check if the stage will ignore color input.
+ * If a coverage stage will ignore input, then we can ignore all coverage stages before it. We
+ * loop to determine the first effective coverage stage, and then copy all of our effective
+ * coverage stages into our optimized state.
+ */
+ void copyEffectiveCoverageStages(const GrDrawState& ds);
+
+ /*
+ * This function takes in a flag and removes the corresponding fixed function vertex attributes.
+ * The flags are in the same order as GrVertexAttribBinding array. If bit i of removeVAFlags is
+ * set, then vertex attributes with binding (GrVertexAttribute)i will be removed.
+ */
+ void removeFixedFunctionVertexAttribs(uint8_t removeVAFlags);
+
+ void removeColorVertexAttrib();
+
+ // These flags are needed to protect the code from creating an unused uniform color/coverage
+ // which will cause shader compiler errors.
+ bool fInputColorIsUsed;
+ bool fInputCoverageIsUsed;
+
+ SkAutoSTArray<4, GrVertexAttrib> fOptVA;
+
+ typedef GrRODrawState INHERITED;
+};
+
+#endif
« no previous file with comments | « src/gpu/GrDrawState.cpp ('k') | src/gpu/GrOptDrawState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698