Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/servers/rendering/rendering_device_commons.cpp
11351 views
1
/**************************************************************************/
2
/* rendering_device_commons.cpp */
3
/**************************************************************************/
4
/* This file is part of: */
5
/* GODOT ENGINE */
6
/* https://godotengine.org */
7
/**************************************************************************/
8
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
9
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
10
/* */
11
/* Permission is hereby granted, free of charge, to any person obtaining */
12
/* a copy of this software and associated documentation files (the */
13
/* "Software"), to deal in the Software without restriction, including */
14
/* without limitation the rights to use, copy, modify, merge, publish, */
15
/* distribute, sublicense, and/or sell copies of the Software, and to */
16
/* permit persons to whom the Software is furnished to do so, subject to */
17
/* the following conditions: */
18
/* */
19
/* The above copyright notice and this permission notice shall be */
20
/* included in all copies or substantial portions of the Software. */
21
/* */
22
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
23
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
24
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
25
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
26
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
27
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
28
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29
/**************************************************************************/
30
31
#include "rendering_device_commons.h"
32
33
/*****************/
34
/**** GENERIC ****/
35
/*****************/
36
37
const char *const RenderingDeviceCommons::FORMAT_NAMES[DATA_FORMAT_MAX] = {
38
"R4G4_Unorm_Pack8",
39
"R4G4B4A4_Unorm_Pack16",
40
"B4G4R4A4_Unorm_Pack16",
41
"R5G6B5_Unorm_Pack16",
42
"B5G6R5_Unorm_Pack16",
43
"R5G5B5A1_Unorm_Pack16",
44
"B5G5R5A1_Unorm_Pack16",
45
"A1R5G5B5_Unorm_Pack16",
46
"R8_Unorm",
47
"R8_Snorm",
48
"R8_Uscaled",
49
"R8_Sscaled",
50
"R8_Uint",
51
"R8_Sint",
52
"R8_Srgb",
53
"R8G8_Unorm",
54
"R8G8_Snorm",
55
"R8G8_Uscaled",
56
"R8G8_Sscaled",
57
"R8G8_Uint",
58
"R8G8_Sint",
59
"R8G8_Srgb",
60
"R8G8B8_Unorm",
61
"R8G8B8_Snorm",
62
"R8G8B8_Uscaled",
63
"R8G8B8_Sscaled",
64
"R8G8B8_Uint",
65
"R8G8B8_Sint",
66
"R8G8B8_Srgb",
67
"B8G8R8_Unorm",
68
"B8G8R8_Snorm",
69
"B8G8R8_Uscaled",
70
"B8G8R8_Sscaled",
71
"B8G8R8_Uint",
72
"B8G8R8_Sint",
73
"B8G8R8_Srgb",
74
"R8G8B8A8_Unorm",
75
"R8G8B8A8_Snorm",
76
"R8G8B8A8_Uscaled",
77
"R8G8B8A8_Sscaled",
78
"R8G8B8A8_Uint",
79
"R8G8B8A8_Sint",
80
"R8G8B8A8_Srgb",
81
"B8G8R8A8_Unorm",
82
"B8G8R8A8_Snorm",
83
"B8G8R8A8_Uscaled",
84
"B8G8R8A8_Sscaled",
85
"B8G8R8A8_Uint",
86
"B8G8R8A8_Sint",
87
"B8G8R8A8_Srgb",
88
"A8B8G8R8_Unorm_Pack32",
89
"A8B8G8R8_Snorm_Pack32",
90
"A8B8G8R8_Uscaled_Pack32",
91
"A8B8G8R8_Sscaled_Pack32",
92
"A8B8G8R8_Uint_Pack32",
93
"A8B8G8R8_Sint_Pack32",
94
"A8B8G8R8_Srgb_Pack32",
95
"A2R10G10B10_Unorm_Pack32",
96
"A2R10G10B10_Snorm_Pack32",
97
"A2R10G10B10_Uscaled_Pack32",
98
"A2R10G10B10_Sscaled_Pack32",
99
"A2R10G10B10_Uint_Pack32",
100
"A2R10G10B10_Sint_Pack32",
101
"A2B10G10R10_Unorm_Pack32",
102
"A2B10G10R10_Snorm_Pack32",
103
"A2B10G10R10_Uscaled_Pack32",
104
"A2B10G10R10_Sscaled_Pack32",
105
"A2B10G10R10_Uint_Pack32",
106
"A2B10G10R10_Sint_Pack32",
107
"R16_Unorm",
108
"R16_Snorm",
109
"R16_Uscaled",
110
"R16_Sscaled",
111
"R16_Uint",
112
"R16_Sint",
113
"R16_Sfloat",
114
"R16G16_Unorm",
115
"R16G16_Snorm",
116
"R16G16_Uscaled",
117
"R16G16_Sscaled",
118
"R16G16_Uint",
119
"R16G16_Sint",
120
"R16G16_Sfloat",
121
"R16G16B16_Unorm",
122
"R16G16B16_Snorm",
123
"R16G16B16_Uscaled",
124
"R16G16B16_Sscaled",
125
"R16G16B16_Uint",
126
"R16G16B16_Sint",
127
"R16G16B16_Sfloat",
128
"R16G16B16A16_Unorm",
129
"R16G16B16A16_Snorm",
130
"R16G16B16A16_Uscaled",
131
"R16G16B16A16_Sscaled",
132
"R16G16B16A16_Uint",
133
"R16G16B16A16_Sint",
134
"R16G16B16A16_Sfloat",
135
"R32_Uint",
136
"R32_Sint",
137
"R32_Sfloat",
138
"R32G32_Uint",
139
"R32G32_Sint",
140
"R32G32_Sfloat",
141
"R32G32B32_Uint",
142
"R32G32B32_Sint",
143
"R32G32B32_Sfloat",
144
"R32G32B32A32_Uint",
145
"R32G32B32A32_Sint",
146
"R32G32B32A32_Sfloat",
147
"R64_Uint",
148
"R64_Sint",
149
"R64_Sfloat",
150
"R64G64_Uint",
151
"R64G64_Sint",
152
"R64G64_Sfloat",
153
"R64G64B64_Uint",
154
"R64G64B64_Sint",
155
"R64G64B64_Sfloat",
156
"R64G64B64A64_Uint",
157
"R64G64B64A64_Sint",
158
"R64G64B64A64_Sfloat",
159
"B10G11R11_Ufloat_Pack32",
160
"E5B9G9R9_Ufloat_Pack32",
161
"D16_Unorm",
162
"X8_D24_Unorm_Pack32",
163
"D32_Sfloat",
164
"S8_Uint",
165
"D16_Unorm_S8_Uint",
166
"D24_Unorm_S8_Uint",
167
"D32_Sfloat_S8_Uint",
168
"Bc1_Rgb_Unorm_Block",
169
"Bc1_Rgb_Srgb_Block",
170
"Bc1_Rgba_Unorm_Block",
171
"Bc1_Rgba_Srgb_Block",
172
"Bc2_Unorm_Block",
173
"Bc2_Srgb_Block",
174
"Bc3_Unorm_Block",
175
"Bc3_Srgb_Block",
176
"Bc4_Unorm_Block",
177
"Bc4_Snorm_Block",
178
"Bc5_Unorm_Block",
179
"Bc5_Snorm_Block",
180
"Bc6H_Ufloat_Block",
181
"Bc6H_Sfloat_Block",
182
"Bc7_Unorm_Block",
183
"Bc7_Srgb_Block",
184
"Etc2_R8G8B8_Unorm_Block",
185
"Etc2_R8G8B8_Srgb_Block",
186
"Etc2_R8G8B8A1_Unorm_Block",
187
"Etc2_R8G8B8A1_Srgb_Block",
188
"Etc2_R8G8B8A8_Unorm_Block",
189
"Etc2_R8G8B8A8_Srgb_Block",
190
"Eac_R11_Unorm_Block",
191
"Eac_R11_Snorm_Block",
192
"Eac_R11G11_Unorm_Block",
193
"Eac_R11G11_Snorm_Block",
194
"Astc_4X4_Unorm_Block",
195
"Astc_4X4_Srgb_Block",
196
"Astc_5X4_Unorm_Block",
197
"Astc_5X4_Srgb_Block",
198
"Astc_5X5_Unorm_Block",
199
"Astc_5X5_Srgb_Block",
200
"Astc_6X5_Unorm_Block",
201
"Astc_6X5_Srgb_Block",
202
"Astc_6X6_Unorm_Block",
203
"Astc_6X6_Srgb_Block",
204
"Astc_8X5_Unorm_Block",
205
"Astc_8X5_Srgb_Block",
206
"Astc_8X6_Unorm_Block",
207
"Astc_8X6_Srgb_Block",
208
"Astc_8X8_Unorm_Block",
209
"Astc_8X8_Srgb_Block",
210
"Astc_10X5_Unorm_Block",
211
"Astc_10X5_Srgb_Block",
212
"Astc_10X6_Unorm_Block",
213
"Astc_10X6_Srgb_Block",
214
"Astc_10X8_Unorm_Block",
215
"Astc_10X8_Srgb_Block",
216
"Astc_10X10_Unorm_Block",
217
"Astc_10X10_Srgb_Block",
218
"Astc_12X10_Unorm_Block",
219
"Astc_12X10_Srgb_Block",
220
"Astc_12X12_Unorm_Block",
221
"Astc_12X12_Srgb_Block",
222
"G8B8G8R8_422_Unorm",
223
"B8G8R8G8_422_Unorm",
224
"G8_B8_R8_3Plane_420_Unorm",
225
"G8_B8R8_2Plane_420_Unorm",
226
"G8_B8_R8_3Plane_422_Unorm",
227
"G8_B8R8_2Plane_422_Unorm",
228
"G8_B8_R8_3Plane_444_Unorm",
229
"R10X6_Unorm_Pack16",
230
"R10X6G10X6_Unorm_2Pack16",
231
"R10X6G10X6B10X6A10X6_Unorm_4Pack16",
232
"G10X6B10X6G10X6R10X6_422_Unorm_4Pack16",
233
"B10X6G10X6R10X6G10X6_422_Unorm_4Pack16",
234
"G10X6_B10X6_R10X6_3Plane_420_Unorm_3Pack16",
235
"G10X6_B10X6R10X6_2Plane_420_Unorm_3Pack16",
236
"G10X6_B10X6_R10X6_3Plane_422_Unorm_3Pack16",
237
"G10X6_B10X6R10X6_2Plane_422_Unorm_3Pack16",
238
"G10X6_B10X6_R10X6_3Plane_444_Unorm_3Pack16",
239
"R12X4_Unorm_Pack16",
240
"R12X4G12X4_Unorm_2Pack16",
241
"R12X4G12X4B12X4A12X4_Unorm_4Pack16",
242
"G12X4B12X4G12X4R12X4_422_Unorm_4Pack16",
243
"B12X4G12X4R12X4G12X4_422_Unorm_4Pack16",
244
"G12X4_B12X4_R12X4_3Plane_420_Unorm_3Pack16",
245
"G12X4_B12X4R12X4_2Plane_420_Unorm_3Pack16",
246
"G12X4_B12X4_R12X4_3Plane_422_Unorm_3Pack16",
247
"G12X4_B12X4R12X4_2Plane_422_Unorm_3Pack16",
248
"G12X4_B12X4_R12X4_3Plane_444_Unorm_3Pack16",
249
"G16B16G16R16_422_Unorm",
250
"B16G16R16G16_422_Unorm",
251
"G16_B16_R16_3Plane_420_Unorm",
252
"G16_B16R16_2Plane_420_Unorm",
253
"G16_B16_R16_3Plane_422_Unorm",
254
"G16_B16R16_2Plane_422_Unorm",
255
"G16_B16_R16_3Plane_444_Unorm",
256
"Astc_4X4_Sfloat_Block",
257
"Astc_5X4_Sfloat_Block",
258
"Astc_5X5_Sfloat_Block",
259
"Astc_6X5_Sfloat_Block",
260
"Astc_6X6_Sfloat_Block",
261
"Astc_8X5_Sfloat_Block",
262
"Astc_8X6_Sfloat_Block",
263
"Astc_8X8_Sfloat_Block",
264
"Astc_10X5_Sfloat_Block",
265
"Astc_10X6_Sfloat_Block",
266
"Astc_10X8_Sfloat_Block",
267
"Astc_10X10_Sfloat_Block",
268
"Astc_12X10_Sfloat_Block",
269
"Astc_12X12_Sfloat_Block",
270
};
271
272
/*****************/
273
/**** TEXTURE ****/
274
/*****************/
275
276
const uint32_t RenderingDeviceCommons::TEXTURE_SAMPLES_COUNT[TEXTURE_SAMPLES_MAX] = { 1, 2, 4, 8, 16, 32, 64 };
277
278
uint32_t RenderingDeviceCommons::get_image_format_pixel_size(DataFormat p_format) {
279
switch (p_format) {
280
case DATA_FORMAT_R4G4_UNORM_PACK8:
281
return 1;
282
case DATA_FORMAT_R4G4B4A4_UNORM_PACK16:
283
case DATA_FORMAT_B4G4R4A4_UNORM_PACK16:
284
case DATA_FORMAT_R5G6B5_UNORM_PACK16:
285
case DATA_FORMAT_B5G6R5_UNORM_PACK16:
286
case DATA_FORMAT_R5G5B5A1_UNORM_PACK16:
287
case DATA_FORMAT_B5G5R5A1_UNORM_PACK16:
288
case DATA_FORMAT_A1R5G5B5_UNORM_PACK16:
289
return 2;
290
case DATA_FORMAT_R8_UNORM:
291
case DATA_FORMAT_R8_SNORM:
292
case DATA_FORMAT_R8_USCALED:
293
case DATA_FORMAT_R8_SSCALED:
294
case DATA_FORMAT_R8_UINT:
295
case DATA_FORMAT_R8_SINT:
296
case DATA_FORMAT_R8_SRGB:
297
return 1;
298
case DATA_FORMAT_R8G8_UNORM:
299
case DATA_FORMAT_R8G8_SNORM:
300
case DATA_FORMAT_R8G8_USCALED:
301
case DATA_FORMAT_R8G8_SSCALED:
302
case DATA_FORMAT_R8G8_UINT:
303
case DATA_FORMAT_R8G8_SINT:
304
case DATA_FORMAT_R8G8_SRGB:
305
return 2;
306
case DATA_FORMAT_R8G8B8_UNORM:
307
case DATA_FORMAT_R8G8B8_SNORM:
308
case DATA_FORMAT_R8G8B8_USCALED:
309
case DATA_FORMAT_R8G8B8_SSCALED:
310
case DATA_FORMAT_R8G8B8_UINT:
311
case DATA_FORMAT_R8G8B8_SINT:
312
case DATA_FORMAT_R8G8B8_SRGB:
313
case DATA_FORMAT_B8G8R8_UNORM:
314
case DATA_FORMAT_B8G8R8_SNORM:
315
case DATA_FORMAT_B8G8R8_USCALED:
316
case DATA_FORMAT_B8G8R8_SSCALED:
317
case DATA_FORMAT_B8G8R8_UINT:
318
case DATA_FORMAT_B8G8R8_SINT:
319
case DATA_FORMAT_B8G8R8_SRGB:
320
return 3;
321
case DATA_FORMAT_R8G8B8A8_UNORM:
322
case DATA_FORMAT_R8G8B8A8_SNORM:
323
case DATA_FORMAT_R8G8B8A8_USCALED:
324
case DATA_FORMAT_R8G8B8A8_SSCALED:
325
case DATA_FORMAT_R8G8B8A8_UINT:
326
case DATA_FORMAT_R8G8B8A8_SINT:
327
case DATA_FORMAT_R8G8B8A8_SRGB:
328
case DATA_FORMAT_B8G8R8A8_UNORM:
329
case DATA_FORMAT_B8G8R8A8_SNORM:
330
case DATA_FORMAT_B8G8R8A8_USCALED:
331
case DATA_FORMAT_B8G8R8A8_SSCALED:
332
case DATA_FORMAT_B8G8R8A8_UINT:
333
case DATA_FORMAT_B8G8R8A8_SINT:
334
case DATA_FORMAT_B8G8R8A8_SRGB:
335
return 4;
336
case DATA_FORMAT_A8B8G8R8_UNORM_PACK32:
337
case DATA_FORMAT_A8B8G8R8_SNORM_PACK32:
338
case DATA_FORMAT_A8B8G8R8_USCALED_PACK32:
339
case DATA_FORMAT_A8B8G8R8_SSCALED_PACK32:
340
case DATA_FORMAT_A8B8G8R8_UINT_PACK32:
341
case DATA_FORMAT_A8B8G8R8_SINT_PACK32:
342
case DATA_FORMAT_A8B8G8R8_SRGB_PACK32:
343
case DATA_FORMAT_A2R10G10B10_UNORM_PACK32:
344
case DATA_FORMAT_A2R10G10B10_SNORM_PACK32:
345
case DATA_FORMAT_A2R10G10B10_USCALED_PACK32:
346
case DATA_FORMAT_A2R10G10B10_SSCALED_PACK32:
347
case DATA_FORMAT_A2R10G10B10_UINT_PACK32:
348
case DATA_FORMAT_A2R10G10B10_SINT_PACK32:
349
case DATA_FORMAT_A2B10G10R10_UNORM_PACK32:
350
case DATA_FORMAT_A2B10G10R10_SNORM_PACK32:
351
case DATA_FORMAT_A2B10G10R10_USCALED_PACK32:
352
case DATA_FORMAT_A2B10G10R10_SSCALED_PACK32:
353
case DATA_FORMAT_A2B10G10R10_UINT_PACK32:
354
case DATA_FORMAT_A2B10G10R10_SINT_PACK32:
355
return 4;
356
case DATA_FORMAT_R16_UNORM:
357
case DATA_FORMAT_R16_SNORM:
358
case DATA_FORMAT_R16_USCALED:
359
case DATA_FORMAT_R16_SSCALED:
360
case DATA_FORMAT_R16_UINT:
361
case DATA_FORMAT_R16_SINT:
362
case DATA_FORMAT_R16_SFLOAT:
363
return 2;
364
case DATA_FORMAT_R16G16_UNORM:
365
case DATA_FORMAT_R16G16_SNORM:
366
case DATA_FORMAT_R16G16_USCALED:
367
case DATA_FORMAT_R16G16_SSCALED:
368
case DATA_FORMAT_R16G16_UINT:
369
case DATA_FORMAT_R16G16_SINT:
370
case DATA_FORMAT_R16G16_SFLOAT:
371
return 4;
372
case DATA_FORMAT_R16G16B16_UNORM:
373
case DATA_FORMAT_R16G16B16_SNORM:
374
case DATA_FORMAT_R16G16B16_USCALED:
375
case DATA_FORMAT_R16G16B16_SSCALED:
376
case DATA_FORMAT_R16G16B16_UINT:
377
case DATA_FORMAT_R16G16B16_SINT:
378
case DATA_FORMAT_R16G16B16_SFLOAT:
379
return 6;
380
case DATA_FORMAT_R16G16B16A16_UNORM:
381
case DATA_FORMAT_R16G16B16A16_SNORM:
382
case DATA_FORMAT_R16G16B16A16_USCALED:
383
case DATA_FORMAT_R16G16B16A16_SSCALED:
384
case DATA_FORMAT_R16G16B16A16_UINT:
385
case DATA_FORMAT_R16G16B16A16_SINT:
386
case DATA_FORMAT_R16G16B16A16_SFLOAT:
387
return 8;
388
case DATA_FORMAT_R32_UINT:
389
case DATA_FORMAT_R32_SINT:
390
case DATA_FORMAT_R32_SFLOAT:
391
return 4;
392
case DATA_FORMAT_R32G32_UINT:
393
case DATA_FORMAT_R32G32_SINT:
394
case DATA_FORMAT_R32G32_SFLOAT:
395
return 8;
396
case DATA_FORMAT_R32G32B32_UINT:
397
case DATA_FORMAT_R32G32B32_SINT:
398
case DATA_FORMAT_R32G32B32_SFLOAT:
399
return 12;
400
case DATA_FORMAT_R32G32B32A32_UINT:
401
case DATA_FORMAT_R32G32B32A32_SINT:
402
case DATA_FORMAT_R32G32B32A32_SFLOAT:
403
return 16;
404
case DATA_FORMAT_R64_UINT:
405
case DATA_FORMAT_R64_SINT:
406
case DATA_FORMAT_R64_SFLOAT:
407
return 8;
408
case DATA_FORMAT_R64G64_UINT:
409
case DATA_FORMAT_R64G64_SINT:
410
case DATA_FORMAT_R64G64_SFLOAT:
411
return 16;
412
case DATA_FORMAT_R64G64B64_UINT:
413
case DATA_FORMAT_R64G64B64_SINT:
414
case DATA_FORMAT_R64G64B64_SFLOAT:
415
return 24;
416
case DATA_FORMAT_R64G64B64A64_UINT:
417
case DATA_FORMAT_R64G64B64A64_SINT:
418
case DATA_FORMAT_R64G64B64A64_SFLOAT:
419
return 32;
420
case DATA_FORMAT_B10G11R11_UFLOAT_PACK32:
421
case DATA_FORMAT_E5B9G9R9_UFLOAT_PACK32:
422
return 4;
423
case DATA_FORMAT_D16_UNORM:
424
return 2;
425
case DATA_FORMAT_X8_D24_UNORM_PACK32:
426
return 4;
427
case DATA_FORMAT_D32_SFLOAT:
428
return 4;
429
case DATA_FORMAT_S8_UINT:
430
return 1;
431
case DATA_FORMAT_D16_UNORM_S8_UINT:
432
return 4;
433
case DATA_FORMAT_D24_UNORM_S8_UINT:
434
return 4;
435
case DATA_FORMAT_D32_SFLOAT_S8_UINT:
436
return 5; // ?
437
case DATA_FORMAT_BC1_RGB_UNORM_BLOCK:
438
case DATA_FORMAT_BC1_RGB_SRGB_BLOCK:
439
case DATA_FORMAT_BC1_RGBA_UNORM_BLOCK:
440
case DATA_FORMAT_BC1_RGBA_SRGB_BLOCK:
441
case DATA_FORMAT_BC2_UNORM_BLOCK:
442
case DATA_FORMAT_BC2_SRGB_BLOCK:
443
case DATA_FORMAT_BC3_UNORM_BLOCK:
444
case DATA_FORMAT_BC3_SRGB_BLOCK:
445
case DATA_FORMAT_BC4_UNORM_BLOCK:
446
case DATA_FORMAT_BC4_SNORM_BLOCK:
447
case DATA_FORMAT_BC5_UNORM_BLOCK:
448
case DATA_FORMAT_BC5_SNORM_BLOCK:
449
case DATA_FORMAT_BC6H_UFLOAT_BLOCK:
450
case DATA_FORMAT_BC6H_SFLOAT_BLOCK:
451
case DATA_FORMAT_BC7_UNORM_BLOCK:
452
case DATA_FORMAT_BC7_SRGB_BLOCK:
453
return 1;
454
case DATA_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
455
case DATA_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
456
case DATA_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
457
case DATA_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
458
case DATA_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
459
case DATA_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
460
return 1;
461
case DATA_FORMAT_EAC_R11_UNORM_BLOCK:
462
case DATA_FORMAT_EAC_R11_SNORM_BLOCK:
463
case DATA_FORMAT_EAC_R11G11_UNORM_BLOCK:
464
case DATA_FORMAT_EAC_R11G11_SNORM_BLOCK:
465
return 1;
466
case DATA_FORMAT_ASTC_4x4_UNORM_BLOCK:
467
case DATA_FORMAT_ASTC_4x4_SRGB_BLOCK:
468
case DATA_FORMAT_ASTC_5x4_UNORM_BLOCK:
469
case DATA_FORMAT_ASTC_5x4_SRGB_BLOCK:
470
case DATA_FORMAT_ASTC_5x5_UNORM_BLOCK:
471
case DATA_FORMAT_ASTC_5x5_SRGB_BLOCK:
472
case DATA_FORMAT_ASTC_6x5_UNORM_BLOCK:
473
case DATA_FORMAT_ASTC_6x5_SRGB_BLOCK:
474
case DATA_FORMAT_ASTC_6x6_UNORM_BLOCK:
475
case DATA_FORMAT_ASTC_6x6_SRGB_BLOCK:
476
case DATA_FORMAT_ASTC_8x5_UNORM_BLOCK:
477
case DATA_FORMAT_ASTC_8x5_SRGB_BLOCK:
478
case DATA_FORMAT_ASTC_8x6_UNORM_BLOCK:
479
case DATA_FORMAT_ASTC_8x6_SRGB_BLOCK:
480
case DATA_FORMAT_ASTC_8x8_UNORM_BLOCK:
481
case DATA_FORMAT_ASTC_8x8_SRGB_BLOCK:
482
case DATA_FORMAT_ASTC_10x5_UNORM_BLOCK:
483
case DATA_FORMAT_ASTC_10x5_SRGB_BLOCK:
484
case DATA_FORMAT_ASTC_10x6_UNORM_BLOCK:
485
case DATA_FORMAT_ASTC_10x6_SRGB_BLOCK:
486
case DATA_FORMAT_ASTC_10x8_UNORM_BLOCK:
487
case DATA_FORMAT_ASTC_10x8_SRGB_BLOCK:
488
case DATA_FORMAT_ASTC_10x10_UNORM_BLOCK:
489
case DATA_FORMAT_ASTC_10x10_SRGB_BLOCK:
490
case DATA_FORMAT_ASTC_12x10_UNORM_BLOCK:
491
case DATA_FORMAT_ASTC_12x10_SRGB_BLOCK:
492
case DATA_FORMAT_ASTC_12x12_UNORM_BLOCK:
493
case DATA_FORMAT_ASTC_12x12_SRGB_BLOCK:
494
case DATA_FORMAT_ASTC_4x4_SFLOAT_BLOCK:
495
case DATA_FORMAT_ASTC_5x4_SFLOAT_BLOCK:
496
case DATA_FORMAT_ASTC_5x5_SFLOAT_BLOCK:
497
case DATA_FORMAT_ASTC_6x5_SFLOAT_BLOCK:
498
case DATA_FORMAT_ASTC_6x6_SFLOAT_BLOCK:
499
case DATA_FORMAT_ASTC_8x5_SFLOAT_BLOCK:
500
case DATA_FORMAT_ASTC_8x6_SFLOAT_BLOCK:
501
case DATA_FORMAT_ASTC_8x8_SFLOAT_BLOCK:
502
case DATA_FORMAT_ASTC_10x5_SFLOAT_BLOCK:
503
case DATA_FORMAT_ASTC_10x6_SFLOAT_BLOCK:
504
case DATA_FORMAT_ASTC_10x8_SFLOAT_BLOCK:
505
case DATA_FORMAT_ASTC_10x10_SFLOAT_BLOCK:
506
case DATA_FORMAT_ASTC_12x10_SFLOAT_BLOCK:
507
case DATA_FORMAT_ASTC_12x12_SFLOAT_BLOCK:
508
return 1;
509
case DATA_FORMAT_G8B8G8R8_422_UNORM:
510
case DATA_FORMAT_B8G8R8G8_422_UNORM:
511
return 4;
512
case DATA_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
513
case DATA_FORMAT_G8_B8R8_2PLANE_420_UNORM:
514
case DATA_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
515
case DATA_FORMAT_G8_B8R8_2PLANE_422_UNORM:
516
case DATA_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
517
return 4;
518
case DATA_FORMAT_R10X6_UNORM_PACK16:
519
case DATA_FORMAT_R10X6G10X6_UNORM_2PACK16:
520
case DATA_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:
521
case DATA_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
522
case DATA_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
523
case DATA_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
524
case DATA_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
525
case DATA_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
526
case DATA_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
527
case DATA_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
528
case DATA_FORMAT_R12X4_UNORM_PACK16:
529
case DATA_FORMAT_R12X4G12X4_UNORM_2PACK16:
530
case DATA_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:
531
case DATA_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
532
case DATA_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
533
case DATA_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
534
case DATA_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
535
case DATA_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
536
case DATA_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
537
case DATA_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
538
return 2;
539
case DATA_FORMAT_G16B16G16R16_422_UNORM:
540
case DATA_FORMAT_B16G16R16G16_422_UNORM:
541
case DATA_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
542
case DATA_FORMAT_G16_B16R16_2PLANE_420_UNORM:
543
case DATA_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
544
case DATA_FORMAT_G16_B16R16_2PLANE_422_UNORM:
545
case DATA_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
546
return 8;
547
default: {
548
ERR_PRINT("Format not handled, bug");
549
}
550
}
551
552
return 1;
553
}
554
555
// https://www.khronos.org/registry/DataFormat/specs/1.1/dataformat.1.1.pdf
556
void RenderingDeviceCommons::get_compressed_image_format_block_dimensions(DataFormat p_format, uint32_t &r_w, uint32_t &r_h) {
557
switch (p_format) {
558
case DATA_FORMAT_BC1_RGB_UNORM_BLOCK:
559
case DATA_FORMAT_BC1_RGB_SRGB_BLOCK:
560
case DATA_FORMAT_BC1_RGBA_UNORM_BLOCK:
561
case DATA_FORMAT_BC1_RGBA_SRGB_BLOCK:
562
case DATA_FORMAT_BC2_UNORM_BLOCK:
563
case DATA_FORMAT_BC2_SRGB_BLOCK:
564
case DATA_FORMAT_BC3_UNORM_BLOCK:
565
case DATA_FORMAT_BC3_SRGB_BLOCK:
566
case DATA_FORMAT_BC4_UNORM_BLOCK:
567
case DATA_FORMAT_BC4_SNORM_BLOCK:
568
case DATA_FORMAT_BC5_UNORM_BLOCK:
569
case DATA_FORMAT_BC5_SNORM_BLOCK:
570
case DATA_FORMAT_BC6H_UFLOAT_BLOCK:
571
case DATA_FORMAT_BC6H_SFLOAT_BLOCK:
572
case DATA_FORMAT_BC7_UNORM_BLOCK:
573
case DATA_FORMAT_BC7_SRGB_BLOCK:
574
case DATA_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
575
case DATA_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
576
case DATA_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
577
case DATA_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
578
case DATA_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
579
case DATA_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
580
case DATA_FORMAT_EAC_R11_UNORM_BLOCK:
581
case DATA_FORMAT_EAC_R11_SNORM_BLOCK:
582
case DATA_FORMAT_EAC_R11G11_UNORM_BLOCK:
583
case DATA_FORMAT_EAC_R11G11_SNORM_BLOCK:
584
case DATA_FORMAT_ASTC_4x4_UNORM_BLOCK: // Again, not sure about astc.
585
case DATA_FORMAT_ASTC_4x4_SRGB_BLOCK:
586
case DATA_FORMAT_ASTC_4x4_SFLOAT_BLOCK: {
587
r_w = 4;
588
r_h = 4;
589
} break;
590
case DATA_FORMAT_ASTC_5x4_UNORM_BLOCK: // Unsupported
591
case DATA_FORMAT_ASTC_5x4_SRGB_BLOCK:
592
case DATA_FORMAT_ASTC_5x4_SFLOAT_BLOCK:
593
case DATA_FORMAT_ASTC_5x5_UNORM_BLOCK:
594
case DATA_FORMAT_ASTC_5x5_SRGB_BLOCK:
595
case DATA_FORMAT_ASTC_5x5_SFLOAT_BLOCK:
596
case DATA_FORMAT_ASTC_6x5_UNORM_BLOCK:
597
case DATA_FORMAT_ASTC_6x5_SRGB_BLOCK:
598
case DATA_FORMAT_ASTC_6x5_SFLOAT_BLOCK:
599
case DATA_FORMAT_ASTC_6x6_UNORM_BLOCK:
600
case DATA_FORMAT_ASTC_6x6_SRGB_BLOCK:
601
case DATA_FORMAT_ASTC_6x6_SFLOAT_BLOCK:
602
case DATA_FORMAT_ASTC_8x5_UNORM_BLOCK:
603
case DATA_FORMAT_ASTC_8x5_SRGB_BLOCK:
604
case DATA_FORMAT_ASTC_8x5_SFLOAT_BLOCK:
605
case DATA_FORMAT_ASTC_8x6_UNORM_BLOCK:
606
case DATA_FORMAT_ASTC_8x6_SRGB_BLOCK:
607
case DATA_FORMAT_ASTC_8x6_SFLOAT_BLOCK: {
608
r_w = 4;
609
r_h = 4;
610
} break;
611
case DATA_FORMAT_ASTC_8x8_UNORM_BLOCK:
612
case DATA_FORMAT_ASTC_8x8_SRGB_BLOCK:
613
case DATA_FORMAT_ASTC_8x8_SFLOAT_BLOCK: {
614
r_w = 8;
615
r_h = 8;
616
} break;
617
case DATA_FORMAT_ASTC_10x5_UNORM_BLOCK: // Unsupported
618
case DATA_FORMAT_ASTC_10x5_SRGB_BLOCK:
619
case DATA_FORMAT_ASTC_10x5_SFLOAT_BLOCK:
620
case DATA_FORMAT_ASTC_10x6_UNORM_BLOCK:
621
case DATA_FORMAT_ASTC_10x6_SRGB_BLOCK:
622
case DATA_FORMAT_ASTC_10x6_SFLOAT_BLOCK:
623
case DATA_FORMAT_ASTC_10x8_UNORM_BLOCK:
624
case DATA_FORMAT_ASTC_10x8_SRGB_BLOCK:
625
case DATA_FORMAT_ASTC_10x8_SFLOAT_BLOCK:
626
case DATA_FORMAT_ASTC_10x10_UNORM_BLOCK:
627
case DATA_FORMAT_ASTC_10x10_SRGB_BLOCK:
628
case DATA_FORMAT_ASTC_10x10_SFLOAT_BLOCK:
629
case DATA_FORMAT_ASTC_12x10_UNORM_BLOCK:
630
case DATA_FORMAT_ASTC_12x10_SRGB_BLOCK:
631
case DATA_FORMAT_ASTC_12x10_SFLOAT_BLOCK:
632
case DATA_FORMAT_ASTC_12x12_UNORM_BLOCK:
633
case DATA_FORMAT_ASTC_12x12_SRGB_BLOCK:
634
case DATA_FORMAT_ASTC_12x12_SFLOAT_BLOCK:
635
r_w = 4;
636
r_h = 4;
637
return;
638
default: {
639
r_w = 1;
640
r_h = 1;
641
}
642
}
643
}
644
645
uint32_t RenderingDeviceCommons::get_compressed_image_format_block_byte_size(DataFormat p_format) const {
646
switch (p_format) {
647
case DATA_FORMAT_BC1_RGB_UNORM_BLOCK:
648
case DATA_FORMAT_BC1_RGB_SRGB_BLOCK:
649
case DATA_FORMAT_BC1_RGBA_UNORM_BLOCK:
650
case DATA_FORMAT_BC1_RGBA_SRGB_BLOCK:
651
return 8;
652
case DATA_FORMAT_BC2_UNORM_BLOCK:
653
case DATA_FORMAT_BC2_SRGB_BLOCK:
654
return 16;
655
case DATA_FORMAT_BC3_UNORM_BLOCK:
656
case DATA_FORMAT_BC3_SRGB_BLOCK:
657
return 16;
658
case DATA_FORMAT_BC4_UNORM_BLOCK:
659
case DATA_FORMAT_BC4_SNORM_BLOCK:
660
return 8;
661
case DATA_FORMAT_BC5_UNORM_BLOCK:
662
case DATA_FORMAT_BC5_SNORM_BLOCK:
663
return 16;
664
case DATA_FORMAT_BC6H_UFLOAT_BLOCK:
665
case DATA_FORMAT_BC6H_SFLOAT_BLOCK:
666
return 16;
667
case DATA_FORMAT_BC7_UNORM_BLOCK:
668
case DATA_FORMAT_BC7_SRGB_BLOCK:
669
return 16;
670
case DATA_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
671
case DATA_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
672
return 8;
673
case DATA_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
674
case DATA_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
675
return 8;
676
case DATA_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
677
case DATA_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
678
return 16;
679
case DATA_FORMAT_EAC_R11_UNORM_BLOCK:
680
case DATA_FORMAT_EAC_R11_SNORM_BLOCK:
681
return 8;
682
case DATA_FORMAT_EAC_R11G11_UNORM_BLOCK:
683
case DATA_FORMAT_EAC_R11G11_SNORM_BLOCK:
684
return 16;
685
case DATA_FORMAT_ASTC_4x4_UNORM_BLOCK: // Again, not sure about astc.
686
case DATA_FORMAT_ASTC_4x4_SRGB_BLOCK:
687
case DATA_FORMAT_ASTC_4x4_SFLOAT_BLOCK:
688
case DATA_FORMAT_ASTC_5x4_UNORM_BLOCK:
689
case DATA_FORMAT_ASTC_5x4_SRGB_BLOCK:
690
case DATA_FORMAT_ASTC_5x4_SFLOAT_BLOCK:
691
case DATA_FORMAT_ASTC_5x5_UNORM_BLOCK:
692
case DATA_FORMAT_ASTC_5x5_SRGB_BLOCK:
693
case DATA_FORMAT_ASTC_5x5_SFLOAT_BLOCK:
694
case DATA_FORMAT_ASTC_6x5_UNORM_BLOCK:
695
case DATA_FORMAT_ASTC_6x5_SRGB_BLOCK:
696
case DATA_FORMAT_ASTC_6x5_SFLOAT_BLOCK:
697
case DATA_FORMAT_ASTC_6x6_UNORM_BLOCK:
698
case DATA_FORMAT_ASTC_6x6_SRGB_BLOCK:
699
case DATA_FORMAT_ASTC_6x6_SFLOAT_BLOCK:
700
case DATA_FORMAT_ASTC_8x5_UNORM_BLOCK:
701
case DATA_FORMAT_ASTC_8x5_SRGB_BLOCK:
702
case DATA_FORMAT_ASTC_8x5_SFLOAT_BLOCK:
703
case DATA_FORMAT_ASTC_8x6_UNORM_BLOCK:
704
case DATA_FORMAT_ASTC_8x6_SRGB_BLOCK:
705
case DATA_FORMAT_ASTC_8x6_SFLOAT_BLOCK:
706
case DATA_FORMAT_ASTC_8x8_UNORM_BLOCK:
707
case DATA_FORMAT_ASTC_8x8_SRGB_BLOCK:
708
case DATA_FORMAT_ASTC_8x8_SFLOAT_BLOCK:
709
case DATA_FORMAT_ASTC_10x5_UNORM_BLOCK:
710
case DATA_FORMAT_ASTC_10x5_SRGB_BLOCK:
711
case DATA_FORMAT_ASTC_10x5_SFLOAT_BLOCK:
712
case DATA_FORMAT_ASTC_10x6_UNORM_BLOCK:
713
case DATA_FORMAT_ASTC_10x6_SRGB_BLOCK:
714
case DATA_FORMAT_ASTC_10x6_SFLOAT_BLOCK:
715
case DATA_FORMAT_ASTC_10x8_UNORM_BLOCK:
716
case DATA_FORMAT_ASTC_10x8_SRGB_BLOCK:
717
case DATA_FORMAT_ASTC_10x8_SFLOAT_BLOCK:
718
case DATA_FORMAT_ASTC_10x10_UNORM_BLOCK:
719
case DATA_FORMAT_ASTC_10x10_SRGB_BLOCK:
720
case DATA_FORMAT_ASTC_10x10_SFLOAT_BLOCK:
721
case DATA_FORMAT_ASTC_12x10_UNORM_BLOCK:
722
case DATA_FORMAT_ASTC_12x10_SRGB_BLOCK:
723
case DATA_FORMAT_ASTC_12x10_SFLOAT_BLOCK:
724
case DATA_FORMAT_ASTC_12x12_UNORM_BLOCK:
725
case DATA_FORMAT_ASTC_12x12_SRGB_BLOCK:
726
case DATA_FORMAT_ASTC_12x12_SFLOAT_BLOCK:
727
return 16;
728
default: {
729
}
730
}
731
return 1;
732
}
733
734
uint32_t RenderingDeviceCommons::get_compressed_image_format_pixel_rshift(DataFormat p_format) {
735
switch (p_format) {
736
case DATA_FORMAT_BC1_RGB_UNORM_BLOCK: // These formats are half byte size, so rshift is 1.
737
case DATA_FORMAT_BC1_RGB_SRGB_BLOCK:
738
case DATA_FORMAT_BC1_RGBA_UNORM_BLOCK:
739
case DATA_FORMAT_BC1_RGBA_SRGB_BLOCK:
740
case DATA_FORMAT_BC4_UNORM_BLOCK:
741
case DATA_FORMAT_BC4_SNORM_BLOCK:
742
case DATA_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
743
case DATA_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
744
case DATA_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
745
case DATA_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
746
case DATA_FORMAT_EAC_R11_UNORM_BLOCK:
747
case DATA_FORMAT_EAC_R11_SNORM_BLOCK:
748
return 1;
749
case DATA_FORMAT_ASTC_8x8_SRGB_BLOCK:
750
case DATA_FORMAT_ASTC_8x8_UNORM_BLOCK:
751
case DATA_FORMAT_ASTC_8x8_SFLOAT_BLOCK: {
752
return 2;
753
}
754
default: {
755
}
756
}
757
758
return 0;
759
}
760
761
uint32_t RenderingDeviceCommons::get_image_format_required_size(DataFormat p_format, uint32_t p_width, uint32_t p_height, uint32_t p_depth, uint32_t p_mipmaps, uint32_t *r_blockw, uint32_t *r_blockh, uint32_t *r_depth) {
762
ERR_FAIL_COND_V(p_mipmaps == 0, 0);
763
uint32_t w = p_width;
764
uint32_t h = p_height;
765
uint32_t d = p_depth;
766
767
uint32_t size = 0;
768
769
uint32_t pixel_size = get_image_format_pixel_size(p_format);
770
uint32_t pixel_rshift = get_compressed_image_format_pixel_rshift(p_format);
771
uint32_t blockw = 0;
772
uint32_t blockh = 0;
773
get_compressed_image_format_block_dimensions(p_format, blockw, blockh);
774
775
for (uint32_t i = 0; i < p_mipmaps; i++) {
776
uint32_t bw = STEPIFY(w, blockw);
777
uint32_t bh = STEPIFY(h, blockh);
778
779
uint32_t s = bw * bh;
780
781
s *= pixel_size;
782
s >>= pixel_rshift;
783
size += s * d;
784
if (r_blockw) {
785
*r_blockw = bw;
786
}
787
if (r_blockh) {
788
*r_blockh = bh;
789
}
790
if (r_depth) {
791
*r_depth = d;
792
}
793
w = MAX(blockw, w >> 1);
794
h = MAX(blockh, h >> 1);
795
d = MAX(1u, d >> 1);
796
}
797
798
return size;
799
}
800
801
uint32_t RenderingDeviceCommons::get_image_required_mipmaps(uint32_t p_width, uint32_t p_height, uint32_t p_depth) {
802
// Formats and block size don't really matter here since they can all go down to 1px (even if block is larger).
803
uint32_t w = p_width;
804
uint32_t h = p_height;
805
uint32_t d = p_depth;
806
807
uint32_t mipmaps = 1;
808
809
while (true) {
810
if (w == 1 && h == 1 && d == 1) {
811
break;
812
}
813
814
w = MAX(1u, w >> 1);
815
h = MAX(1u, h >> 1);
816
d = MAX(1u, d >> 1);
817
818
mipmaps++;
819
}
820
821
return mipmaps;
822
}
823
824
bool RenderingDeviceCommons::format_has_stencil(DataFormat p_format) {
825
switch (p_format) {
826
case DATA_FORMAT_S8_UINT:
827
case DATA_FORMAT_D16_UNORM_S8_UINT:
828
case DATA_FORMAT_D24_UNORM_S8_UINT:
829
case DATA_FORMAT_D32_SFLOAT_S8_UINT: {
830
return true;
831
}
832
default: {
833
}
834
}
835
return false;
836
}
837
838
uint32_t RenderingDeviceCommons::format_get_plane_count(DataFormat p_format) {
839
uint32_t planes = 1;
840
switch (p_format) {
841
case DATA_FORMAT_D16_UNORM_S8_UINT:
842
case DATA_FORMAT_D24_UNORM_S8_UINT:
843
case DATA_FORMAT_D32_SFLOAT_S8_UINT: {
844
planes = 2;
845
break;
846
}
847
default: {
848
}
849
}
850
DEV_ASSERT(planes <= MAX_IMAGE_FORMAT_PLANES);
851
return planes;
852
}
853
854
/*****************/
855
/**** SAMPLER ****/
856
/*****************/
857
858
const Color RenderingDeviceCommons::SAMPLER_BORDER_COLOR_VALUE[SAMPLER_BORDER_COLOR_MAX] = {
859
Color(0, 0, 0, 0),
860
Color(0, 0, 0, 0),
861
Color(0, 0, 0, 1),
862
Color(0, 0, 0, 1),
863
Color(1, 1, 1, 1),
864
Color(1, 1, 1, 1),
865
};
866
867
/**********************/
868
/**** VERTEX ARRAY ****/
869
/**********************/
870
871
uint32_t RenderingDeviceCommons::get_format_vertex_size(DataFormat p_format) {
872
switch (p_format) {
873
case DATA_FORMAT_R8_UNORM:
874
case DATA_FORMAT_R8_SNORM:
875
case DATA_FORMAT_R8_UINT:
876
case DATA_FORMAT_R8_SINT:
877
case DATA_FORMAT_R8G8_UNORM:
878
case DATA_FORMAT_R8G8_SNORM:
879
case DATA_FORMAT_R8G8_UINT:
880
case DATA_FORMAT_R8G8_SINT:
881
case DATA_FORMAT_R8G8B8_UNORM:
882
case DATA_FORMAT_R8G8B8_SNORM:
883
case DATA_FORMAT_R8G8B8_UINT:
884
case DATA_FORMAT_R8G8B8_SINT:
885
case DATA_FORMAT_B8G8R8_UNORM:
886
case DATA_FORMAT_B8G8R8_SNORM:
887
case DATA_FORMAT_B8G8R8_UINT:
888
case DATA_FORMAT_B8G8R8_SINT:
889
case DATA_FORMAT_R8G8B8A8_UNORM:
890
case DATA_FORMAT_R8G8B8A8_SNORM:
891
case DATA_FORMAT_R8G8B8A8_UINT:
892
case DATA_FORMAT_R8G8B8A8_SINT:
893
case DATA_FORMAT_B8G8R8A8_UNORM:
894
case DATA_FORMAT_B8G8R8A8_SNORM:
895
case DATA_FORMAT_B8G8R8A8_UINT:
896
case DATA_FORMAT_B8G8R8A8_SINT:
897
case DATA_FORMAT_A2B10G10R10_UNORM_PACK32:
898
return 4;
899
case DATA_FORMAT_R16_UNORM:
900
case DATA_FORMAT_R16_SNORM:
901
case DATA_FORMAT_R16_UINT:
902
case DATA_FORMAT_R16_SINT:
903
case DATA_FORMAT_R16_SFLOAT:
904
return 4;
905
case DATA_FORMAT_R16G16_UNORM:
906
case DATA_FORMAT_R16G16_SNORM:
907
case DATA_FORMAT_R16G16_UINT:
908
case DATA_FORMAT_R16G16_SINT:
909
case DATA_FORMAT_R16G16_SFLOAT:
910
return 4;
911
case DATA_FORMAT_R16G16B16_UNORM:
912
case DATA_FORMAT_R16G16B16_SNORM:
913
case DATA_FORMAT_R16G16B16_UINT:
914
case DATA_FORMAT_R16G16B16_SINT:
915
case DATA_FORMAT_R16G16B16_SFLOAT:
916
return 8;
917
case DATA_FORMAT_R16G16B16A16_UNORM:
918
case DATA_FORMAT_R16G16B16A16_SNORM:
919
case DATA_FORMAT_R16G16B16A16_UINT:
920
case DATA_FORMAT_R16G16B16A16_SINT:
921
case DATA_FORMAT_R16G16B16A16_SFLOAT:
922
return 8;
923
case DATA_FORMAT_R32_UINT:
924
case DATA_FORMAT_R32_SINT:
925
case DATA_FORMAT_R32_SFLOAT:
926
return 4;
927
case DATA_FORMAT_R32G32_UINT:
928
case DATA_FORMAT_R32G32_SINT:
929
case DATA_FORMAT_R32G32_SFLOAT:
930
return 8;
931
case DATA_FORMAT_R32G32B32_UINT:
932
case DATA_FORMAT_R32G32B32_SINT:
933
case DATA_FORMAT_R32G32B32_SFLOAT:
934
return 12;
935
case DATA_FORMAT_R32G32B32A32_UINT:
936
case DATA_FORMAT_R32G32B32A32_SINT:
937
case DATA_FORMAT_R32G32B32A32_SFLOAT:
938
return 16;
939
case DATA_FORMAT_R64_UINT:
940
case DATA_FORMAT_R64_SINT:
941
case DATA_FORMAT_R64_SFLOAT:
942
return 8;
943
case DATA_FORMAT_R64G64_UINT:
944
case DATA_FORMAT_R64G64_SINT:
945
case DATA_FORMAT_R64G64_SFLOAT:
946
return 16;
947
case DATA_FORMAT_R64G64B64_UINT:
948
case DATA_FORMAT_R64G64B64_SINT:
949
case DATA_FORMAT_R64G64B64_SFLOAT:
950
return 24;
951
case DATA_FORMAT_R64G64B64A64_UINT:
952
case DATA_FORMAT_R64G64B64A64_SINT:
953
case DATA_FORMAT_R64G64B64A64_SFLOAT:
954
return 32;
955
default:
956
return 0;
957
}
958
}
959
960
/****************/
961
/**** SHADER ****/
962
/****************/
963
964
const char *RenderingDeviceCommons::SHADER_STAGE_NAMES[SHADER_STAGE_MAX] = {
965
"Vertex",
966
"Fragment",
967
"TesselationControl",
968
"TesselationEvaluation",
969
"Compute",
970
};
971
972