Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
MtlUtils.mm
Go to the documentation of this file.
1/*
2 * Copyright 2021 Google Inc.
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
9
15
16namespace skgpu {
17
18bool MtlFormatIsDepthOrStencil(MTLPixelFormat format) {
19 switch (format) {
20 case MTLPixelFormatStencil8: // fallthrough
21 case MTLPixelFormatDepth32Float:
22 case MTLPixelFormatDepth32Float_Stencil8:
23 return true;
24 default:
25 return false;
26 }
27}
28
29bool MtlFormatIsDepth(MTLPixelFormat format) {
30 switch (format) {
31 case MTLPixelFormatDepth32Float:
32 case MTLPixelFormatDepth32Float_Stencil8:
33 return true;
34 default:
35 return false;
36 }
37}
38
39bool MtlFormatIsStencil(MTLPixelFormat format) {
40 switch (format) {
41 case MTLPixelFormatStencil8: // fallthrough
42 case MTLPixelFormatDepth32Float_Stencil8:
43 return true;
44 default:
45 return false;
46 }
47}
48
49bool MtlFormatIsCompressed(MTLPixelFormat mtlFormat) {
50 switch (mtlFormat) {
51 case MTLPixelFormatETC2_RGB8:
52 return true;
53#ifdef SK_BUILD_FOR_MAC
54 case MTLPixelFormatBC1_RGBA:
55 return true;
56#endif
57 default:
58 return false;
59 }
60}
61
62const char* MtlFormatToString(MTLPixelFormat mtlFormat) {
63 switch (mtlFormat) {
64 case MTLPixelFormatInvalid: return "Invalid";
65 case MTLPixelFormatRGBA8Unorm: return "RGBA8Unorm";
66 case MTLPixelFormatR8Unorm: return "R8Unorm";
67 case MTLPixelFormatA8Unorm: return "A8Unorm";
68 case MTLPixelFormatBGRA8Unorm: return "BGRA8Unorm";
69 case MTLPixelFormatB5G6R5Unorm: return "B5G6R5Unorm";
70 case MTLPixelFormatRGBA16Float: return "RGBA16Float";
71 case MTLPixelFormatR16Float: return "R16Float";
72 case MTLPixelFormatRG8Unorm: return "RG8Unorm";
73 case MTLPixelFormatRGB10A2Unorm: return "RGB10A2Unorm";
74 case MTLPixelFormatBGR10A2Unorm: return "BGR10A2Unorm";
75 case MTLPixelFormatABGR4Unorm: return "ABGR4Unorm";
76 case MTLPixelFormatRGBA8Unorm_sRGB: return "RGBA8Unorm_sRGB";
77 case MTLPixelFormatR16Unorm: return "R16Unorm";
78 case MTLPixelFormatRG16Unorm: return "RG16Unorm";
79 case MTLPixelFormatETC2_RGB8: return "ETC2_RGB8";
80#ifdef SK_BUILD_FOR_MAC
81 case MTLPixelFormatBC1_RGBA: return "BC1_RGBA";
82#endif
83 case MTLPixelFormatRGBA16Unorm: return "RGBA16Unorm";
84 case MTLPixelFormatRG16Float: return "RG16Float";
85 case MTLPixelFormatStencil8: return "Stencil8";
86
87 default: return "Unknown";
88 }
89}
90
91uint32_t MtlFormatChannels(MTLPixelFormat mtlFormat) {
92 switch (mtlFormat) {
93 case MTLPixelFormatRGBA8Unorm: return kRGBA_SkColorChannelFlags;
94 case MTLPixelFormatR8Unorm: return kRed_SkColorChannelFlag;
95 case MTLPixelFormatA8Unorm: return kAlpha_SkColorChannelFlag;
96 case MTLPixelFormatBGRA8Unorm: return kRGBA_SkColorChannelFlags;
97 case MTLPixelFormatB5G6R5Unorm: return kRGB_SkColorChannelFlags;
98 case MTLPixelFormatRGBA16Float: return kRGBA_SkColorChannelFlags;
99 case MTLPixelFormatR16Float: return kRed_SkColorChannelFlag;
100 case MTLPixelFormatRG8Unorm: return kRG_SkColorChannelFlags;
101 case MTLPixelFormatRGB10A2Unorm: return kRGBA_SkColorChannelFlags;
102 case MTLPixelFormatBGR10A2Unorm: return kRGBA_SkColorChannelFlags;
103 case MTLPixelFormatABGR4Unorm: return kRGBA_SkColorChannelFlags;
104 case MTLPixelFormatRGBA8Unorm_sRGB: return kRGBA_SkColorChannelFlags;
105 case MTLPixelFormatR16Unorm: return kRed_SkColorChannelFlag;
106 case MTLPixelFormatRG16Unorm: return kRG_SkColorChannelFlags;
107 case MTLPixelFormatETC2_RGB8: return kRGB_SkColorChannelFlags;
108#ifdef SK_BUILD_FOR_MAC
109 case MTLPixelFormatBC1_RGBA: return kRGBA_SkColorChannelFlags;
110#endif
111 case MTLPixelFormatRGBA16Unorm: return kRGBA_SkColorChannelFlags;
112 case MTLPixelFormatRG16Float: return kRG_SkColorChannelFlags;
113 case MTLPixelFormatStencil8: return 0;
114
115 default: return 0;
116 }
117}
118
119size_t MtlFormatBytesPerBlock(MTLPixelFormat mtlFormat) {
120 switch (mtlFormat) {
121 case MTLPixelFormatInvalid: return 0;
122 case MTLPixelFormatRGBA8Unorm: return 4;
123 case MTLPixelFormatR8Unorm: return 1;
124 case MTLPixelFormatA8Unorm: return 1;
125 case MTLPixelFormatBGRA8Unorm: return 4;
126 case MTLPixelFormatB5G6R5Unorm: return 2;
127 case MTLPixelFormatRGBA16Float: return 8;
128 case MTLPixelFormatR16Float: return 2;
129 case MTLPixelFormatRG8Unorm: return 2;
130 case MTLPixelFormatRGB10A2Unorm: return 4;
131 case MTLPixelFormatBGR10A2Unorm: return 4;
132 case MTLPixelFormatABGR4Unorm: return 2;
133 case MTLPixelFormatRGBA8Unorm_sRGB: return 4;
134 case MTLPixelFormatR16Unorm: return 2;
135 case MTLPixelFormatRG16Unorm: return 4;
136 case MTLPixelFormatETC2_RGB8: return 8;
137#ifdef SK_BUILD_FOR_MAC
138 case MTLPixelFormatBC1_RGBA: return 8;
139#endif
140 case MTLPixelFormatRGBA16Unorm: return 8;
141 case MTLPixelFormatRG16Float: return 4;
142 case MTLPixelFormatStencil8: return 1;
143
144 default: return 0;
145 }
146}
147
149 switch (mtlFormat) {
150 case MTLPixelFormatETC2_RGB8: return SkTextureCompressionType::kETC2_RGB8_UNORM;
151#ifdef SK_BUILD_FOR_MAC
152 case MTLPixelFormatBC1_RGBA: return SkTextureCompressionType::kBC1_RGBA8_UNORM;
153#endif
154 default: return SkTextureCompressionType::kNone;
155 }
156}
157
158} // namespace skgpu
@ kRGB_SkColorChannelFlags
Definition SkColor.h:247
@ kRGBA_SkColorChannelFlags
Definition SkColor.h:248
@ kRed_SkColorChannelFlag
Definition SkColor.h:239
@ kRG_SkColorChannelFlags
Definition SkColor.h:246
@ kAlpha_SkColorChannelFlag
Definition SkColor.h:242
uint32_t uint32_t * format
uint32_t MtlFormatChannels(MTLPixelFormat mtlFormat)
Definition MtlUtils.mm:91
const char * MtlFormatToString(MTLPixelFormat mtlFormat)
Definition MtlUtils.mm:62
bool MtlFormatIsStencil(MTLPixelFormat format)
Definition MtlUtils.mm:39
bool MtlFormatIsDepthOrStencil(MTLPixelFormat format)
Definition MtlUtils.mm:18
bool MtlFormatIsDepth(MTLPixelFormat format)
Definition MtlUtils.mm:29
SkTextureCompressionType MtlFormatToCompressionType(MTLPixelFormat mtlFormat)
Definition MtlUtils.mm:148
bool MtlFormatIsCompressed(MTLPixelFormat mtlFormat)
Definition MtlUtils.mm:49
size_t MtlFormatBytesPerBlock(MTLPixelFormat mtlFormat)
Definition MtlUtils.mm:119