xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrUtil.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2020 Google LLC
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrUtil.h"
9*c8dee2aaSAndroid Build Coastguard Worker 
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkStrokeRec.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkDrawProcs.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrStyle.h"
13*c8dee2aaSAndroid Build Coastguard Worker 
GrGetIntelGpuFamily(uint32_t deviceID)14*c8dee2aaSAndroid Build Coastguard Worker GrIntelGpuFamily GrGetIntelGpuFamily(uint32_t deviceID) {
15*c8dee2aaSAndroid Build Coastguard Worker     // https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units
16*c8dee2aaSAndroid Build Coastguard Worker     uint32_t maskedID = deviceID & 0xFF00;
17*c8dee2aaSAndroid Build Coastguard Worker     switch (maskedID) {
18*c8dee2aaSAndroid Build Coastguard Worker         case 0x0100:
19*c8dee2aaSAndroid Build Coastguard Worker             switch (deviceID & 0xFFF0) {
20*c8dee2aaSAndroid Build Coastguard Worker                 case 0x0100:
21*c8dee2aaSAndroid Build Coastguard Worker                 case 0x0110:
22*c8dee2aaSAndroid Build Coastguard Worker                 case 0x0120:
23*c8dee2aaSAndroid Build Coastguard Worker                     return kSandyBridge_IntelGpuFamily;
24*c8dee2aaSAndroid Build Coastguard Worker                 case 0x0150:
25*c8dee2aaSAndroid Build Coastguard Worker                     if (deviceID == 0x0155 || deviceID == 0x0157) {
26*c8dee2aaSAndroid Build Coastguard Worker                         return kValleyView_IntelGpuFamily;
27*c8dee2aaSAndroid Build Coastguard Worker                     }
28*c8dee2aaSAndroid Build Coastguard Worker                     if (deviceID == 0x0152 || deviceID == 0x015A) {
29*c8dee2aaSAndroid Build Coastguard Worker                         return kIvyBridge_IntelGpuFamily;
30*c8dee2aaSAndroid Build Coastguard Worker                     }
31*c8dee2aaSAndroid Build Coastguard Worker                     break;
32*c8dee2aaSAndroid Build Coastguard Worker                 case 0x0160:
33*c8dee2aaSAndroid Build Coastguard Worker                     return kIvyBridge_IntelGpuFamily;
34*c8dee2aaSAndroid Build Coastguard Worker                 default:
35*c8dee2aaSAndroid Build Coastguard Worker                     break;
36*c8dee2aaSAndroid Build Coastguard Worker             }
37*c8dee2aaSAndroid Build Coastguard Worker             break;
38*c8dee2aaSAndroid Build Coastguard Worker         case 0x0F00:
39*c8dee2aaSAndroid Build Coastguard Worker             return kValleyView_IntelGpuFamily;
40*c8dee2aaSAndroid Build Coastguard Worker         case 0x0400:
41*c8dee2aaSAndroid Build Coastguard Worker         case 0x0A00:
42*c8dee2aaSAndroid Build Coastguard Worker         case 0x0D00:
43*c8dee2aaSAndroid Build Coastguard Worker             return kHaswell_IntelGpuFamily;
44*c8dee2aaSAndroid Build Coastguard Worker         case 0x2200:
45*c8dee2aaSAndroid Build Coastguard Worker             return kCherryView_IntelGpuFamily;
46*c8dee2aaSAndroid Build Coastguard Worker         case 0x1600:
47*c8dee2aaSAndroid Build Coastguard Worker             return kBroadwell_IntelGpuFamily;
48*c8dee2aaSAndroid Build Coastguard Worker         case 0x5A00:
49*c8dee2aaSAndroid Build Coastguard Worker             return kApolloLake_IntelGpuFamily;
50*c8dee2aaSAndroid Build Coastguard Worker         case 0x1900:
51*c8dee2aaSAndroid Build Coastguard Worker             return kSkyLake_IntelGpuFamily;
52*c8dee2aaSAndroid Build Coastguard Worker         case 0x3100:
53*c8dee2aaSAndroid Build Coastguard Worker             return kGeminiLake_IntelGpuFamily;
54*c8dee2aaSAndroid Build Coastguard Worker         case 0x5900:
55*c8dee2aaSAndroid Build Coastguard Worker             return kKabyLake_IntelGpuFamily;
56*c8dee2aaSAndroid Build Coastguard Worker         case 0x3E00:
57*c8dee2aaSAndroid Build Coastguard Worker             return kCoffeeLake_IntelGpuFamily;
58*c8dee2aaSAndroid Build Coastguard Worker         case 0x8A00:
59*c8dee2aaSAndroid Build Coastguard Worker             return kIceLake_IntelGpuFamily;
60*c8dee2aaSAndroid Build Coastguard Worker         default:
61*c8dee2aaSAndroid Build Coastguard Worker             break;
62*c8dee2aaSAndroid Build Coastguard Worker     }
63*c8dee2aaSAndroid Build Coastguard Worker     return kUnknown_IntelGpuFamily;
64*c8dee2aaSAndroid Build Coastguard Worker }
65*c8dee2aaSAndroid Build Coastguard Worker 
GrIsStrokeHairlineOrEquivalent(const GrStyle & style,const SkMatrix & matrix,SkScalar * outCoverage)66*c8dee2aaSAndroid Build Coastguard Worker bool GrIsStrokeHairlineOrEquivalent(const GrStyle& style,
67*c8dee2aaSAndroid Build Coastguard Worker                                     const SkMatrix& matrix,
68*c8dee2aaSAndroid Build Coastguard Worker                                     SkScalar* outCoverage) {
69*c8dee2aaSAndroid Build Coastguard Worker     if (style.pathEffect()) {
70*c8dee2aaSAndroid Build Coastguard Worker         return false;
71*c8dee2aaSAndroid Build Coastguard Worker     }
72*c8dee2aaSAndroid Build Coastguard Worker     const SkStrokeRec& stroke = style.strokeRec();
73*c8dee2aaSAndroid Build Coastguard Worker     if (stroke.isHairlineStyle()) {
74*c8dee2aaSAndroid Build Coastguard Worker         if (outCoverage) {
75*c8dee2aaSAndroid Build Coastguard Worker             *outCoverage = SK_Scalar1;
76*c8dee2aaSAndroid Build Coastguard Worker         }
77*c8dee2aaSAndroid Build Coastguard Worker         return true;
78*c8dee2aaSAndroid Build Coastguard Worker     }
79*c8dee2aaSAndroid Build Coastguard Worker     return stroke.getStyle() == SkStrokeRec::kStroke_Style &&
80*c8dee2aaSAndroid Build Coastguard Worker            SkDrawTreatAAStrokeAsHairline(stroke.getWidth(), matrix, outCoverage);
81*c8dee2aaSAndroid Build Coastguard Worker }
82