blob: ba109cfa0e1a40f8815533b5db632de199c2145d [file] [log] [blame]
Michael Ludwig0f809022019-06-04 09:14:37 -04001/*
2 * Copyright 2019 Google LLC
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "src/gpu/geometry/GrQuadUtils.h"
9
10#include "include/private/GrTypesPriv.h"
11#include "src/gpu/geometry/GrQuad.h"
12
13namespace GrQuadUtils {
14
15void ResolveAAType(GrAAType requestedAAType, GrQuadAAFlags requestedEdgeFlags, const GrQuad& quad,
16 GrAAType* outAAType, GrQuadAAFlags* outEdgeFlags) {
17 // Most cases will keep the requested types unchanged
18 *outAAType = requestedAAType;
19 *outEdgeFlags = requestedEdgeFlags;
20
21 switch (requestedAAType) {
22 // When aa type is coverage, disable AA if the edge configuration doesn't actually need it
23 case GrAAType::kCoverage:
24 if (requestedEdgeFlags == GrQuadAAFlags::kNone) {
25 // Turn off anti-aliasing
26 *outAAType = GrAAType::kNone;
27 } else {
28 // For coverage AA, if the quad is a rect and it lines up with pixel boundaries
29 // then overall aa and per-edge aa can be completely disabled
30 if (quad.quadType() == GrQuad::Type::kAxisAligned && !quad.aaHasEffectOnRect()) {
31 *outAAType = GrAAType::kNone;
32 *outEdgeFlags = GrQuadAAFlags::kNone;
33 }
34 }
35 break;
36 // For no or msaa anti aliasing, override the edge flags since edge flags only make sense
37 // when coverage aa is being used.
38 case GrAAType::kNone:
39 *outEdgeFlags = GrQuadAAFlags::kNone;
40 break;
41 case GrAAType::kMSAA:
42 *outEdgeFlags = GrQuadAAFlags::kAll;
43 break;
44 case GrAAType::kMixedSamples:
45 SK_ABORT("Should not use mixed sample AA with edge AA flags");
46 break;
47 }
48};
49
50}; // namespace GrQuadUtils