1 /*
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 #ifndef GrUtil_DEFINED
8 #define GrUtil_DEFINED
9
10 #include "include/core/SkScalar.h"
11 #include "include/core/SkTypes.h"
12 #include "include/gpu/ganesh/GrTypes.h"
13 #include "include/private/gpu/ganesh/GrTypesPriv.h"
14 #include "src/core/SkSLTypeShared.h"
15
16 #include <cstdint>
17
18 class GrStyle;
19 class SkMatrix;
20
21 enum GrIntelGpuFamily {
22 kUnknown_IntelGpuFamily,
23
24 // 6th gen
25 kSandyBridge_IntelGpuFamily,
26
27 // 7th gen
28 kIvyBridge_IntelGpuFamily,
29 kValleyView_IntelGpuFamily, // aka BayTrail
30 kHaswell_IntelGpuFamily,
31
32 // 8th gen
33 kCherryView_IntelGpuFamily, // aka Braswell
34 kBroadwell_IntelGpuFamily,
35
36 // 9th gen
37 kApolloLake_IntelGpuFamily,
38 kSkyLake_IntelGpuFamily,
39 kGeminiLake_IntelGpuFamily,
40 kKabyLake_IntelGpuFamily,
41 kCoffeeLake_IntelGpuFamily,
42
43 // 11th gen
44 kIceLake_IntelGpuFamily,
45 };
46
47 GrIntelGpuFamily GrGetIntelGpuFamily(uint32_t deviceID);
48
49 // Helper for determining if we can treat a thin stroke as a hairline w/ coverage.
50 // If we can, we draw lots faster (raster device does this same test).
51 bool GrIsStrokeHairlineOrEquivalent(const GrStyle&, const SkMatrix&, SkScalar* outCoverage);
52
SkSLCombinedSamplerTypeForTextureType(GrTextureType type)53 static inline SkSLType SkSLCombinedSamplerTypeForTextureType(GrTextureType type) {
54 switch (type) {
55 case GrTextureType::k2D:
56 return SkSLType::kTexture2DSampler;
57 case GrTextureType::kRectangle:
58 return SkSLType::kTexture2DRectSampler;
59 case GrTextureType::kExternal:
60 return SkSLType::kTextureExternalSampler;
61 default:
62 SK_ABORT("Unexpected texture type");
63 }
64 }
65
GrBackendApiToStr(GrBackendApi api)66 static constexpr const char* GrBackendApiToStr(GrBackendApi api) {
67 switch (api) {
68 case GrBackendApi::kOpenGL: return "OpenGL";
69 case GrBackendApi::kVulkan: return "Vulkan";
70 case GrBackendApi::kMetal: return "Metal";
71 case GrBackendApi::kDirect3D: return "Direct3D";
72 case GrBackendApi::kMock: return "Mock";
73 case GrBackendApi::kUnsupported: return "Unsupported";
74 }
75 SkUNREACHABLE;
76 }
77
GrColorTypeToStr(GrColorType ct)78 static constexpr const char* GrColorTypeToStr(GrColorType ct) {
79 switch (ct) {
80 case GrColorType::kUnknown: return "kUnknown";
81 case GrColorType::kAlpha_8: return "kAlpha_8";
82 case GrColorType::kBGR_565: return "kBGR_565";
83 case GrColorType::kRGB_565: return "kRGB_565";
84 case GrColorType::kABGR_4444: return "kABGR_4444";
85 case GrColorType::kRGBA_8888: return "kRGBA_8888";
86 case GrColorType::kRGBA_8888_SRGB: return "kRGBA_8888_SRGB";
87 case GrColorType::kRGB_888x: return "kRGB_888x";
88 case GrColorType::kRG_88: return "kRG_88";
89 case GrColorType::kBGRA_8888: return "kBGRA_8888";
90 case GrColorType::kRGBA_1010102: return "kRGBA_1010102";
91 case GrColorType::kBGRA_1010102: return "kBGRA_1010102";
92 case GrColorType::kRGB_101010x: return "kRGB_101010x";
93 case GrColorType::kRGBA_10x6: return "kBGRA_10x6";
94 case GrColorType::kGray_8: return "kGray_8";
95 case GrColorType::kGrayAlpha_88: return "kGrayAlpha_88";
96 case GrColorType::kAlpha_F16: return "kAlpha_F16";
97 case GrColorType::kRGBA_F16: return "kRGBA_F16";
98 case GrColorType::kRGBA_F16_Clamped: return "kRGBA_F16_Clamped";
99 case GrColorType::kRGB_F16F16F16x: return "kRGB_F16F16F16x";
100 case GrColorType::kRGBA_F32: return "kRGBA_F32";
101 case GrColorType::kAlpha_8xxx: return "kAlpha_8xxx";
102 case GrColorType::kAlpha_F32xxx: return "kAlpha_F32xxx";
103 case GrColorType::kGray_8xxx: return "kGray_8xxx";
104 case GrColorType::kR_8xxx: return "kR_8xxx";
105 case GrColorType::kAlpha_16: return "kAlpha_16";
106 case GrColorType::kRG_1616: return "kRG_1616";
107 case GrColorType::kRGBA_16161616: return "kRGBA_16161616";
108 case GrColorType::kRG_F16: return "kRG_F16";
109 case GrColorType::kRGB_888: return "kRGB_888";
110 case GrColorType::kR_8: return "kR_8";
111 case GrColorType::kR_16: return "kR_16";
112 case GrColorType::kR_F16: return "kR_F16";
113 case GrColorType::kGray_F16: return "kGray_F16";
114 case GrColorType::kARGB_4444: return "kARGB_4444";
115 case GrColorType::kBGRA_4444: return "kBGRA_4444";
116 }
117 SkUNREACHABLE;
118 }
119
GrSurfaceOriginToStr(GrSurfaceOrigin origin)120 static constexpr const char* GrSurfaceOriginToStr(GrSurfaceOrigin origin) {
121 switch (origin) {
122 case kTopLeft_GrSurfaceOrigin: return "kTopLeft";
123 case kBottomLeft_GrSurfaceOrigin: return "kBottomLeft";
124 }
125 SkUNREACHABLE;
126 }
127
128 #endif
129