1cb93a386Sopenharmony_ci// Copyright 2020 The Dawn Authors
2cb93a386Sopenharmony_ci//
3cb93a386Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
4cb93a386Sopenharmony_ci// you may not use this file except in compliance with the License.
5cb93a386Sopenharmony_ci// You may obtain a copy of the License at
6cb93a386Sopenharmony_ci//
7cb93a386Sopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
8cb93a386Sopenharmony_ci//
9cb93a386Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software
10cb93a386Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS,
11cb93a386Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12cb93a386Sopenharmony_ci// See the License for the specific language governing permissions and
13cb93a386Sopenharmony_ci// limitations under the License.
14cb93a386Sopenharmony_ci
15cb93a386Sopenharmony_ci#include "TextureUtils.h"
16cb93a386Sopenharmony_ci
17cb93a386Sopenharmony_cinamespace utils {
18cb93a386Sopenharmony_ci    bool TextureFormatSupportsStorageTexture(wgpu::TextureFormat format) {
19cb93a386Sopenharmony_ci        switch (format) {
20cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Uint:
21cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Sint:
22cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Float:
23cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Unorm:
24cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Snorm:
25cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Uint:
26cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Sint:
27cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Uint:
28cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Sint:
29cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Float:
30cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Uint:
31cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Sint:
32cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Float:
33cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Uint:
34cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Sint:
35cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Float:
36cb93a386Sopenharmony_ci                return true;
37cb93a386Sopenharmony_ci
38cb93a386Sopenharmony_ci            default:
39cb93a386Sopenharmony_ci                return false;
40cb93a386Sopenharmony_ci        }
41cb93a386Sopenharmony_ci    }
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ci    bool IsBCTextureFormat(wgpu::TextureFormat textureFormat) {
44cb93a386Sopenharmony_ci        switch (textureFormat) {
45cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC1RGBAUnorm:
46cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC1RGBAUnormSrgb:
47cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC4RUnorm:
48cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC4RSnorm:
49cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC2RGBAUnorm:
50cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC2RGBAUnormSrgb:
51cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC3RGBAUnorm:
52cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC3RGBAUnormSrgb:
53cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC5RGUnorm:
54cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC5RGSnorm:
55cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC6HRGBUfloat:
56cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC6HRGBFloat:
57cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC7RGBAUnorm:
58cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC7RGBAUnormSrgb:
59cb93a386Sopenharmony_ci                return true;
60cb93a386Sopenharmony_ci
61cb93a386Sopenharmony_ci            default:
62cb93a386Sopenharmony_ci                return false;
63cb93a386Sopenharmony_ci        }
64cb93a386Sopenharmony_ci    }
65cb93a386Sopenharmony_ci
66cb93a386Sopenharmony_ci    bool IsETC2TextureFormat(wgpu::TextureFormat textureFormat) {
67cb93a386Sopenharmony_ci        switch (textureFormat) {
68cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8Unorm:
69cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8UnormSrgb:
70cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8A1Unorm:
71cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8A1UnormSrgb:
72cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACR11Unorm:
73cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACR11Snorm:
74cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGBA8Unorm:
75cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGBA8UnormSrgb:
76cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACRG11Unorm:
77cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACRG11Snorm:
78cb93a386Sopenharmony_ci                return true;
79cb93a386Sopenharmony_ci
80cb93a386Sopenharmony_ci            default:
81cb93a386Sopenharmony_ci                return false;
82cb93a386Sopenharmony_ci        }
83cb93a386Sopenharmony_ci    }
84cb93a386Sopenharmony_ci
85cb93a386Sopenharmony_ci    bool IsASTCTextureFormat(wgpu::TextureFormat textureFormat) {
86cb93a386Sopenharmony_ci        switch (textureFormat) {
87cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC4x4Unorm:
88cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC4x4UnormSrgb:
89cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x4Unorm:
90cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x4UnormSrgb:
91cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x5Unorm:
92cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x5UnormSrgb:
93cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x5Unorm:
94cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x5UnormSrgb:
95cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x6Unorm:
96cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x6UnormSrgb:
97cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x5Unorm:
98cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x5UnormSrgb:
99cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x6Unorm:
100cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x6UnormSrgb:
101cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x8Unorm:
102cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x8UnormSrgb:
103cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x5Unorm:
104cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x5UnormSrgb:
105cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x6Unorm:
106cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x6UnormSrgb:
107cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x8Unorm:
108cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x8UnormSrgb:
109cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x10Unorm:
110cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x10UnormSrgb:
111cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x10Unorm:
112cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x10UnormSrgb:
113cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x12Unorm:
114cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x12UnormSrgb:
115cb93a386Sopenharmony_ci                return true;
116cb93a386Sopenharmony_ci
117cb93a386Sopenharmony_ci            default:
118cb93a386Sopenharmony_ci                return false;
119cb93a386Sopenharmony_ci        }
120cb93a386Sopenharmony_ci    }
121cb93a386Sopenharmony_ci
122cb93a386Sopenharmony_ci    bool IsDepthOnlyFormat(wgpu::TextureFormat textureFormat) {
123cb93a386Sopenharmony_ci        switch (textureFormat) {
124cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth16Unorm:
125cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24Plus:
126cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth32Float:
127cb93a386Sopenharmony_ci                return true;
128cb93a386Sopenharmony_ci            default:
129cb93a386Sopenharmony_ci                return false;
130cb93a386Sopenharmony_ci        }
131cb93a386Sopenharmony_ci    }
132cb93a386Sopenharmony_ci
133cb93a386Sopenharmony_ci    uint32_t GetTexelBlockSizeInBytes(wgpu::TextureFormat textureFormat) {
134cb93a386Sopenharmony_ci        switch (textureFormat) {
135cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Unorm:
136cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Snorm:
137cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Uint:
138cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Sint:
139cb93a386Sopenharmony_ci                return 1u;
140cb93a386Sopenharmony_ci
141cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Uint:
142cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Sint:
143cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Float:
144cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Unorm:
145cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Snorm:
146cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Uint:
147cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Sint:
148cb93a386Sopenharmony_ci                return 2u;
149cb93a386Sopenharmony_ci
150cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Float:
151cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Uint:
152cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Sint:
153cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Uint:
154cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Sint:
155cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Float:
156cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Unorm:
157cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8UnormSrgb:
158cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Snorm:
159cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Uint:
160cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Sint:
161cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8Unorm:
162cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8UnormSrgb:
163cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB10A2Unorm:
164cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG11B10Ufloat:
165cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB9E5Ufloat:
166cb93a386Sopenharmony_ci                return 4u;
167cb93a386Sopenharmony_ci
168cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Float:
169cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Uint:
170cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Sint:
171cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Uint:
172cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Sint:
173cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Float:
174cb93a386Sopenharmony_ci                return 8u;
175cb93a386Sopenharmony_ci
176cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Float:
177cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Uint:
178cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Sint:
179cb93a386Sopenharmony_ci                return 16u;
180cb93a386Sopenharmony_ci
181cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth16Unorm:
182cb93a386Sopenharmony_ci                return 2u;
183cb93a386Sopenharmony_ci
184cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24Plus:
185cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24UnormStencil8:
186cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth32Float:
187cb93a386Sopenharmony_ci                return 4u;
188cb93a386Sopenharmony_ci
189cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC1RGBAUnorm:
190cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC1RGBAUnormSrgb:
191cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC4RUnorm:
192cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC4RSnorm:
193cb93a386Sopenharmony_ci                return 8u;
194cb93a386Sopenharmony_ci
195cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC2RGBAUnorm:
196cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC2RGBAUnormSrgb:
197cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC3RGBAUnorm:
198cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC3RGBAUnormSrgb:
199cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC5RGUnorm:
200cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC5RGSnorm:
201cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC6HRGBUfloat:
202cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC6HRGBFloat:
203cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC7RGBAUnorm:
204cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC7RGBAUnormSrgb:
205cb93a386Sopenharmony_ci                return 16u;
206cb93a386Sopenharmony_ci
207cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8Unorm:
208cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8UnormSrgb:
209cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8A1Unorm:
210cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8A1UnormSrgb:
211cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACR11Unorm:
212cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACR11Snorm:
213cb93a386Sopenharmony_ci                return 8u;
214cb93a386Sopenharmony_ci
215cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGBA8Unorm:
216cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGBA8UnormSrgb:
217cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACRG11Unorm:
218cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACRG11Snorm:
219cb93a386Sopenharmony_ci                return 16u;
220cb93a386Sopenharmony_ci
221cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC4x4Unorm:
222cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC4x4UnormSrgb:
223cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x4Unorm:
224cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x4UnormSrgb:
225cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x5Unorm:
226cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x5UnormSrgb:
227cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x5Unorm:
228cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x5UnormSrgb:
229cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x6Unorm:
230cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x6UnormSrgb:
231cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x5Unorm:
232cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x5UnormSrgb:
233cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x6Unorm:
234cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x6UnormSrgb:
235cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x8Unorm:
236cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x8UnormSrgb:
237cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x5Unorm:
238cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x5UnormSrgb:
239cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x6Unorm:
240cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x6UnormSrgb:
241cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x8Unorm:
242cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x8UnormSrgb:
243cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x10Unorm:
244cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x10UnormSrgb:
245cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x10Unorm:
246cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x10UnormSrgb:
247cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x12Unorm:
248cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x12UnormSrgb:
249cb93a386Sopenharmony_ci                return 16u;
250cb93a386Sopenharmony_ci
251cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24PlusStencil8:
252cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth32FloatStencil8:
253cb93a386Sopenharmony_ci
254cb93a386Sopenharmony_ci            // Block size of a multi-planar format depends on aspect.
255cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8BG8Biplanar420Unorm:
256cb93a386Sopenharmony_ci
257cb93a386Sopenharmony_ci            // TODO(dawn:666): implement stencil8
258cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Stencil8:
259cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Undefined:
260cb93a386Sopenharmony_ci                break;
261cb93a386Sopenharmony_ci        }
262cb93a386Sopenharmony_ci        UNREACHABLE();
263cb93a386Sopenharmony_ci    }
264cb93a386Sopenharmony_ci
265cb93a386Sopenharmony_ci    uint32_t GetTextureFormatBlockWidth(wgpu::TextureFormat textureFormat) {
266cb93a386Sopenharmony_ci        switch (textureFormat) {
267cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Unorm:
268cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Snorm:
269cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Uint:
270cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Sint:
271cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Uint:
272cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Sint:
273cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Float:
274cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Unorm:
275cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Snorm:
276cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Uint:
277cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Sint:
278cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Float:
279cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Uint:
280cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Sint:
281cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Uint:
282cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Sint:
283cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Float:
284cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Unorm:
285cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8UnormSrgb:
286cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Snorm:
287cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Uint:
288cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Sint:
289cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8Unorm:
290cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8UnormSrgb:
291cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB10A2Unorm:
292cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG11B10Ufloat:
293cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB9E5Ufloat:
294cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Float:
295cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Uint:
296cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Sint:
297cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Uint:
298cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Sint:
299cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Float:
300cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Float:
301cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Uint:
302cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Sint:
303cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth32Float:
304cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24Plus:
305cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24PlusStencil8:
306cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth16Unorm:
307cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24UnormStencil8:
308cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth32FloatStencil8:
309cb93a386Sopenharmony_ci                return 1u;
310cb93a386Sopenharmony_ci
311cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC1RGBAUnorm:
312cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC1RGBAUnormSrgb:
313cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC4RUnorm:
314cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC4RSnorm:
315cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC2RGBAUnorm:
316cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC2RGBAUnormSrgb:
317cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC3RGBAUnorm:
318cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC3RGBAUnormSrgb:
319cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC5RGUnorm:
320cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC5RGSnorm:
321cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC6HRGBUfloat:
322cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC6HRGBFloat:
323cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC7RGBAUnorm:
324cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC7RGBAUnormSrgb:
325cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8Unorm:
326cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8UnormSrgb:
327cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8A1Unorm:
328cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8A1UnormSrgb:
329cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGBA8Unorm:
330cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGBA8UnormSrgb:
331cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACR11Unorm:
332cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACR11Snorm:
333cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACRG11Unorm:
334cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACRG11Snorm:
335cb93a386Sopenharmony_ci                return 4u;
336cb93a386Sopenharmony_ci
337cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC4x4Unorm:
338cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC4x4UnormSrgb:
339cb93a386Sopenharmony_ci                return 4u;
340cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x4Unorm:
341cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x4UnormSrgb:
342cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x5Unorm:
343cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x5UnormSrgb:
344cb93a386Sopenharmony_ci                return 5u;
345cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x5Unorm:
346cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x5UnormSrgb:
347cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x6Unorm:
348cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x6UnormSrgb:
349cb93a386Sopenharmony_ci                return 6u;
350cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x5Unorm:
351cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x5UnormSrgb:
352cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x6Unorm:
353cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x6UnormSrgb:
354cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x8Unorm:
355cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x8UnormSrgb:
356cb93a386Sopenharmony_ci                return 8u;
357cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x5Unorm:
358cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x5UnormSrgb:
359cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x6Unorm:
360cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x6UnormSrgb:
361cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x8Unorm:
362cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x8UnormSrgb:
363cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x10Unorm:
364cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x10UnormSrgb:
365cb93a386Sopenharmony_ci                return 10u;
366cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x10Unorm:
367cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x10UnormSrgb:
368cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x12Unorm:
369cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x12UnormSrgb:
370cb93a386Sopenharmony_ci                return 12u;
371cb93a386Sopenharmony_ci
372cb93a386Sopenharmony_ci            // Block size of a multi-planar format depends on aspect.
373cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8BG8Biplanar420Unorm:
374cb93a386Sopenharmony_ci
375cb93a386Sopenharmony_ci            // TODO(dawn:666): implement stencil8
376cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Stencil8:
377cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Undefined:
378cb93a386Sopenharmony_ci                break;
379cb93a386Sopenharmony_ci        }
380cb93a386Sopenharmony_ci        UNREACHABLE();
381cb93a386Sopenharmony_ci    }
382cb93a386Sopenharmony_ci
383cb93a386Sopenharmony_ci    uint32_t GetTextureFormatBlockHeight(wgpu::TextureFormat textureFormat) {
384cb93a386Sopenharmony_ci        switch (textureFormat) {
385cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Unorm:
386cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Snorm:
387cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Uint:
388cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Sint:
389cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Uint:
390cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Sint:
391cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Float:
392cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Unorm:
393cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Snorm:
394cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Uint:
395cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Sint:
396cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Float:
397cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Uint:
398cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Sint:
399cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Uint:
400cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Sint:
401cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Float:
402cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Unorm:
403cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8UnormSrgb:
404cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Snorm:
405cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Uint:
406cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Sint:
407cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8Unorm:
408cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8UnormSrgb:
409cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB10A2Unorm:
410cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG11B10Ufloat:
411cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB9E5Ufloat:
412cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Float:
413cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Uint:
414cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Sint:
415cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Uint:
416cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Sint:
417cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Float:
418cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Float:
419cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Uint:
420cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Sint:
421cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth32Float:
422cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24Plus:
423cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24PlusStencil8:
424cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth16Unorm:
425cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth24UnormStencil8:
426cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Depth32FloatStencil8:
427cb93a386Sopenharmony_ci                return 1u;
428cb93a386Sopenharmony_ci
429cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC1RGBAUnorm:
430cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC1RGBAUnormSrgb:
431cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC4RUnorm:
432cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC4RSnorm:
433cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC2RGBAUnorm:
434cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC2RGBAUnormSrgb:
435cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC3RGBAUnorm:
436cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC3RGBAUnormSrgb:
437cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC5RGUnorm:
438cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC5RGSnorm:
439cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC6HRGBUfloat:
440cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC6HRGBFloat:
441cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC7RGBAUnorm:
442cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BC7RGBAUnormSrgb:
443cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8Unorm:
444cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8UnormSrgb:
445cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8A1Unorm:
446cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGB8A1UnormSrgb:
447cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGBA8Unorm:
448cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ETC2RGBA8UnormSrgb:
449cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACR11Unorm:
450cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACR11Snorm:
451cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACRG11Unorm:
452cb93a386Sopenharmony_ci            case wgpu::TextureFormat::EACRG11Snorm:
453cb93a386Sopenharmony_ci                return 4u;
454cb93a386Sopenharmony_ci
455cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC4x4Unorm:
456cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC4x4UnormSrgb:
457cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x4Unorm:
458cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x4UnormSrgb:
459cb93a386Sopenharmony_ci                return 4u;
460cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x5Unorm:
461cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC5x5UnormSrgb:
462cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x5Unorm:
463cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x5UnormSrgb:
464cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x5Unorm:
465cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x5UnormSrgb:
466cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x5Unorm:
467cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x5UnormSrgb:
468cb93a386Sopenharmony_ci                return 5u;
469cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x6Unorm:
470cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC6x6UnormSrgb:
471cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x6Unorm:
472cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x6UnormSrgb:
473cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x6Unorm:
474cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x6UnormSrgb:
475cb93a386Sopenharmony_ci                return 6u;
476cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x8Unorm:
477cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC8x8UnormSrgb:
478cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x8Unorm:
479cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x8UnormSrgb:
480cb93a386Sopenharmony_ci                return 8u;
481cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x10Unorm:
482cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC10x10UnormSrgb:
483cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x10Unorm:
484cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x10UnormSrgb:
485cb93a386Sopenharmony_ci                return 10u;
486cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x12Unorm:
487cb93a386Sopenharmony_ci            case wgpu::TextureFormat::ASTC12x12UnormSrgb:
488cb93a386Sopenharmony_ci                return 12u;
489cb93a386Sopenharmony_ci
490cb93a386Sopenharmony_ci            // Block size of a multi-planar format depends on aspect.
491cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8BG8Biplanar420Unorm:
492cb93a386Sopenharmony_ci
493cb93a386Sopenharmony_ci            // TODO(dawn:666): implement stencil8
494cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Stencil8:
495cb93a386Sopenharmony_ci            case wgpu::TextureFormat::Undefined:
496cb93a386Sopenharmony_ci                break;
497cb93a386Sopenharmony_ci        }
498cb93a386Sopenharmony_ci        UNREACHABLE();
499cb93a386Sopenharmony_ci    }
500cb93a386Sopenharmony_ci
501cb93a386Sopenharmony_ci    const char* GetWGSLColorTextureComponentType(wgpu::TextureFormat textureFormat) {
502cb93a386Sopenharmony_ci        switch (textureFormat) {
503cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Unorm:
504cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Snorm:
505cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Float:
506cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Unorm:
507cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Snorm:
508cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Float:
509cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Float:
510cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Unorm:
511cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Snorm:
512cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB10A2Unorm:
513cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG11B10Ufloat:
514cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB9E5Ufloat:
515cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Float:
516cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Float:
517cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Float:
518cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8Unorm:
519cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8UnormSrgb:
520cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8UnormSrgb:
521cb93a386Sopenharmony_ci                return "f32";
522cb93a386Sopenharmony_ci
523cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Uint:
524cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Uint:
525cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Uint:
526cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Uint:
527cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Uint:
528cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Uint:
529cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Uint:
530cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Uint:
531cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Uint:
532cb93a386Sopenharmony_ci                return "u32";
533cb93a386Sopenharmony_ci
534cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Sint:
535cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Sint:
536cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Sint:
537cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Sint:
538cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Sint:
539cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Sint:
540cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Sint:
541cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Sint:
542cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Sint:
543cb93a386Sopenharmony_ci                return "i32";
544cb93a386Sopenharmony_ci
545cb93a386Sopenharmony_ci            default:
546cb93a386Sopenharmony_ci                UNREACHABLE();
547cb93a386Sopenharmony_ci        }
548cb93a386Sopenharmony_ci    }
549cb93a386Sopenharmony_ci
550cb93a386Sopenharmony_ci    uint32_t GetWGSLRenderableColorTextureComponentCount(wgpu::TextureFormat textureFormat) {
551cb93a386Sopenharmony_ci        switch (textureFormat) {
552cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Unorm:
553cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Uint:
554cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Sint:
555cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Uint:
556cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Sint:
557cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Float:
558cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Float:
559cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Uint:
560cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Sint:
561cb93a386Sopenharmony_ci                return 1u;
562cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Unorm:
563cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Uint:
564cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Sint:
565cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Uint:
566cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Sint:
567cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Float:
568cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Float:
569cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Uint:
570cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Sint:
571cb93a386Sopenharmony_ci                return 2u;
572cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Unorm:
573cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8UnormSrgb:
574cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Uint:
575cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Sint:
576cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8Unorm:
577cb93a386Sopenharmony_ci            case wgpu::TextureFormat::BGRA8UnormSrgb:
578cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB10A2Unorm:
579cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Uint:
580cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Sint:
581cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Float:
582cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Float:
583cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Uint:
584cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Sint:
585cb93a386Sopenharmony_ci                return 4u;
586cb93a386Sopenharmony_ci            default:
587cb93a386Sopenharmony_ci                UNREACHABLE();
588cb93a386Sopenharmony_ci        }
589cb93a386Sopenharmony_ci    }
590cb93a386Sopenharmony_ci
591cb93a386Sopenharmony_ci    const char* GetWGSLImageFormatQualifier(wgpu::TextureFormat textureFormat) {
592cb93a386Sopenharmony_ci        switch (textureFormat) {
593cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Unorm:
594cb93a386Sopenharmony_ci                return "rgba8unorm";
595cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Snorm:
596cb93a386Sopenharmony_ci                return "rgba8snorm";
597cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Uint:
598cb93a386Sopenharmony_ci                return "rgba8uint";
599cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA8Sint:
600cb93a386Sopenharmony_ci                return "rgba8sint";
601cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Uint:
602cb93a386Sopenharmony_ci                return "rgba16uint";
603cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Sint:
604cb93a386Sopenharmony_ci                return "rgba16sint";
605cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA16Float:
606cb93a386Sopenharmony_ci                return "rgba16float";
607cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Uint:
608cb93a386Sopenharmony_ci                return "r32uint";
609cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Sint:
610cb93a386Sopenharmony_ci                return "r32sint";
611cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R32Float:
612cb93a386Sopenharmony_ci                return "r32float";
613cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Uint:
614cb93a386Sopenharmony_ci                return "rg32uint";
615cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Sint:
616cb93a386Sopenharmony_ci                return "rg32sint";
617cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG32Float:
618cb93a386Sopenharmony_ci                return "rg32float";
619cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Uint:
620cb93a386Sopenharmony_ci                return "rgba32uint";
621cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Sint:
622cb93a386Sopenharmony_ci                return "rgba32sint";
623cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGBA32Float:
624cb93a386Sopenharmony_ci                return "rgba32float";
625cb93a386Sopenharmony_ci
626cb93a386Sopenharmony_ci            // The below do not currently exist in the WGSL spec, but are used
627cb93a386Sopenharmony_ci            // for tests that expect compilation failure.
628cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Unorm:
629cb93a386Sopenharmony_ci                return "r8unorm";
630cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Snorm:
631cb93a386Sopenharmony_ci                return "r8snorm";
632cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Uint:
633cb93a386Sopenharmony_ci                return "r8uint";
634cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R8Sint:
635cb93a386Sopenharmony_ci                return "r8sint";
636cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Uint:
637cb93a386Sopenharmony_ci                return "r16uint";
638cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Sint:
639cb93a386Sopenharmony_ci                return "r16sint";
640cb93a386Sopenharmony_ci            case wgpu::TextureFormat::R16Float:
641cb93a386Sopenharmony_ci                return "r16float";
642cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Unorm:
643cb93a386Sopenharmony_ci                return "rg8unorm";
644cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Snorm:
645cb93a386Sopenharmony_ci                return "rg8snorm";
646cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Uint:
647cb93a386Sopenharmony_ci                return "rg8uint";
648cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG8Sint:
649cb93a386Sopenharmony_ci                return "rg8sint";
650cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Uint:
651cb93a386Sopenharmony_ci                return "rg16uint";
652cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Sint:
653cb93a386Sopenharmony_ci                return "rg16sint";
654cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG16Float:
655cb93a386Sopenharmony_ci                return "rg16float";
656cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RGB10A2Unorm:
657cb93a386Sopenharmony_ci                return "rgb10a2unorm";
658cb93a386Sopenharmony_ci            case wgpu::TextureFormat::RG11B10Ufloat:
659cb93a386Sopenharmony_ci                return "rg11b10ufloat";
660cb93a386Sopenharmony_ci
661cb93a386Sopenharmony_ci            default:
662cb93a386Sopenharmony_ci                UNREACHABLE();
663cb93a386Sopenharmony_ci        }
664cb93a386Sopenharmony_ci    }
665cb93a386Sopenharmony_ci
666cb93a386Sopenharmony_ci    wgpu::TextureDimension ViewDimensionToTextureDimension(
667cb93a386Sopenharmony_ci        const wgpu::TextureViewDimension dimension) {
668cb93a386Sopenharmony_ci        switch (dimension) {
669cb93a386Sopenharmony_ci            case wgpu::TextureViewDimension::e2D:
670cb93a386Sopenharmony_ci            case wgpu::TextureViewDimension::e2DArray:
671cb93a386Sopenharmony_ci            case wgpu::TextureViewDimension::Cube:
672cb93a386Sopenharmony_ci            case wgpu::TextureViewDimension::CubeArray:
673cb93a386Sopenharmony_ci                return wgpu::TextureDimension::e2D;
674cb93a386Sopenharmony_ci            case wgpu::TextureViewDimension::e3D:
675cb93a386Sopenharmony_ci                return wgpu::TextureDimension::e3D;
676cb93a386Sopenharmony_ci            // TODO(crbug.com/dawn/814): Implement for 1D texture.
677cb93a386Sopenharmony_ci            case wgpu::TextureViewDimension::e1D:
678cb93a386Sopenharmony_ci            default:
679cb93a386Sopenharmony_ci                UNREACHABLE();
680cb93a386Sopenharmony_ci                break;
681cb93a386Sopenharmony_ci        }
682cb93a386Sopenharmony_ci    }
683cb93a386Sopenharmony_ci
684cb93a386Sopenharmony_ci}  // namespace utils
685