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