Add GrQuadUtils namespace to hold ResolveAAType function
Change-Id: I6357af83b55be8efa8dfd709acde908296c05f82
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/216605
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/geometry/GrQuad.cpp b/src/gpu/geometry/GrQuad.cpp
index 6ed7232..78f4e3b 100644
--- a/src/gpu/geometry/GrQuad.cpp
+++ b/src/gpu/geometry/GrQuad.cpp
@@ -8,7 +8,6 @@
#include "src/gpu/geometry/GrQuad.h"
#include "include/core/SkMatrix.h"
-#include "include/private/GrTypesPriv.h"
using V4f = skvx::Vec<4, float>;
@@ -100,41 +99,6 @@
}
}
-void GrResolveAATypeForQuad(GrAAType requestedAAType, GrQuadAAFlags requestedEdgeFlags,
- const GrQuad& quad, GrAAType* outAAType, GrQuadAAFlags* outEdgeFlags) {
- // Most cases will keep the requested types unchanged
- *outAAType = requestedAAType;
- *outEdgeFlags = requestedEdgeFlags;
-
- switch (requestedAAType) {
- // When aa type is coverage, disable AA if the edge configuration doesn't actually need it
- case GrAAType::kCoverage:
- if (requestedEdgeFlags == GrQuadAAFlags::kNone) {
- // Turn off anti-aliasing
- *outAAType = GrAAType::kNone;
- } else {
- // For coverage AA, if the quad is a rect and it lines up with pixel boundaries
- // then overall aa and per-edge aa can be completely disabled
- if (quad.quadType() == GrQuad::Type::kAxisAligned && !quad.aaHasEffectOnRect()) {
- *outAAType = GrAAType::kNone;
- *outEdgeFlags = GrQuadAAFlags::kNone;
- }
- }
- break;
- // For no or msaa anti aliasing, override the edge flags since edge flags only make sense
- // when coverage aa is being used.
- case GrAAType::kNone:
- *outEdgeFlags = GrQuadAAFlags::kNone;
- break;
- case GrAAType::kMSAA:
- *outEdgeFlags = GrQuadAAFlags::kAll;
- break;
- case GrAAType::kMixedSamples:
- SK_ABORT("Should not use mixed sample AA with edge AA flags");
- break;
- }
-};
-
GrQuad GrQuad::MakeFromRect(const SkRect& rect, const SkMatrix& m) {
V4f x, y, w;
SkMatrix::TypeMask tm = m.getType();
diff --git a/src/gpu/geometry/GrQuad.h b/src/gpu/geometry/GrQuad.h
index 27d98cb..9f4f974 100644
--- a/src/gpu/geometry/GrQuad.h
+++ b/src/gpu/geometry/GrQuad.h
@@ -13,9 +13,6 @@
#include "include/core/SkPoint3.h"
#include "include/private/SkVx.h"
-enum class GrAAType : unsigned;
-enum class GrQuadAAFlags;
-
/**
* GrQuad is a collection of 4 points which can be used to represent an arbitrary quadrilateral. The
* points make a triangle strip with CCW triangles (top-left, bottom-left, top-right, bottom-right).
@@ -131,9 +128,4 @@
Type fType;
};
-// Resolve disagreements between the overall requested AA type and the per-edge quad AA flags.
-// Both outAAType and outEdgeFlags will be updated.
-void GrResolveAATypeForQuad(GrAAType requestedAAType, GrQuadAAFlags requestedEdgeFlags,
- const GrQuad& quad, GrAAType* outAAtype, GrQuadAAFlags* outEdgeFlags);
-
#endif
diff --git a/src/gpu/geometry/GrQuadUtils.cpp b/src/gpu/geometry/GrQuadUtils.cpp
new file mode 100644
index 0000000..ba109cf
--- /dev/null
+++ b/src/gpu/geometry/GrQuadUtils.cpp
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "src/gpu/geometry/GrQuadUtils.h"
+
+#include "include/private/GrTypesPriv.h"
+#include "src/gpu/geometry/GrQuad.h"
+
+namespace GrQuadUtils {
+
+void ResolveAAType(GrAAType requestedAAType, GrQuadAAFlags requestedEdgeFlags, const GrQuad& quad,
+ GrAAType* outAAType, GrQuadAAFlags* outEdgeFlags) {
+ // Most cases will keep the requested types unchanged
+ *outAAType = requestedAAType;
+ *outEdgeFlags = requestedEdgeFlags;
+
+ switch (requestedAAType) {
+ // When aa type is coverage, disable AA if the edge configuration doesn't actually need it
+ case GrAAType::kCoverage:
+ if (requestedEdgeFlags == GrQuadAAFlags::kNone) {
+ // Turn off anti-aliasing
+ *outAAType = GrAAType::kNone;
+ } else {
+ // For coverage AA, if the quad is a rect and it lines up with pixel boundaries
+ // then overall aa and per-edge aa can be completely disabled
+ if (quad.quadType() == GrQuad::Type::kAxisAligned && !quad.aaHasEffectOnRect()) {
+ *outAAType = GrAAType::kNone;
+ *outEdgeFlags = GrQuadAAFlags::kNone;
+ }
+ }
+ break;
+ // For no or msaa anti aliasing, override the edge flags since edge flags only make sense
+ // when coverage aa is being used.
+ case GrAAType::kNone:
+ *outEdgeFlags = GrQuadAAFlags::kNone;
+ break;
+ case GrAAType::kMSAA:
+ *outEdgeFlags = GrQuadAAFlags::kAll;
+ break;
+ case GrAAType::kMixedSamples:
+ SK_ABORT("Should not use mixed sample AA with edge AA flags");
+ break;
+ }
+};
+
+}; // namespace GrQuadUtils
diff --git a/src/gpu/geometry/GrQuadUtils.h b/src/gpu/geometry/GrQuadUtils.h
new file mode 100644
index 0000000..29feeeb
--- /dev/null
+++ b/src/gpu/geometry/GrQuadUtils.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrQuadUtils_DEFINED
+#define GrQuadUtils_DEFINED
+
+enum class GrQuadAAFlags;
+enum class GrAAType : unsigned;
+class GrQuad;
+
+namespace GrQuadUtils {
+
+ // Resolve disagreements between the overall requested AA type and the per-edge quad AA flags.
+ // Both outAAType and outEdgeFlags will be updated.
+ void ResolveAAType(GrAAType requestedAAType, GrQuadAAFlags requestedEdgeFlags,
+ const GrQuad& quad, GrAAType* outAAtype, GrQuadAAFlags* outEdgeFlags);
+
+}; // namespace GrQuadUtils
+
+#endif