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/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