Blender V5.0
vk_common.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "BLI_utildefines.h"
10
11#include "vk_common.hh"
12
13namespace blender::gpu {
15{
16 switch (format) {
17 /* Formats texture & render-buffer */
18 case TextureFormat::UINT_32_32_32_32:
19 case TextureFormat::UINT_32_32:
20 case TextureFormat::UINT_32:
21 case TextureFormat::UINT_16_16_16_16:
22 case TextureFormat::UINT_16_16:
23 case TextureFormat::UINT_16:
24 case TextureFormat::UINT_8_8_8_8:
25 case TextureFormat::UINT_8_8:
26 case TextureFormat::UINT_8:
27 case TextureFormat::SINT_32_32_32_32:
28 case TextureFormat::SINT_32_32:
29 case TextureFormat::SINT_32:
30 case TextureFormat::SINT_16_16_16_16:
31 case TextureFormat::SINT_16_16:
32 case TextureFormat::SINT_16:
33 case TextureFormat::SINT_8_8_8_8:
34 case TextureFormat::SINT_8_8:
35 case TextureFormat::SINT_8:
36 case TextureFormat::SFLOAT_32_32_32_32:
37 case TextureFormat::SFLOAT_32_32:
38 case TextureFormat::SFLOAT_32:
39 case TextureFormat::SFLOAT_16_16_16_16:
40 case TextureFormat::SFLOAT_16_16:
41 case TextureFormat::SFLOAT_16:
42 case TextureFormat::UNORM_16_16_16_16:
43 case TextureFormat::UNORM_16_16:
44 case TextureFormat::UNORM_16:
45 case TextureFormat::UNORM_8_8_8_8:
46 case TextureFormat::UNORM_8_8:
47 case TextureFormat::UNORM_8:
48 return VK_IMAGE_ASPECT_COLOR_BIT;
49
50 /* Special formats texture & render-buffer */
51 case TextureFormat::UNORM_10_10_10_2:
52 case TextureFormat::UINT_10_10_10_2:
53 case TextureFormat::UFLOAT_11_11_10:
54 case TextureFormat::SRGBA_8_8_8_8:
55 return VK_IMAGE_ASPECT_COLOR_BIT;
56
57 /* Depth Formats. */
58 case TextureFormat::SFLOAT_32_DEPTH:
59 case TextureFormat::UNORM_16_DEPTH:
60 return VK_IMAGE_ASPECT_DEPTH_BIT;
61
62 case TextureFormat::SFLOAT_32_DEPTH_UINT_8:
63 return VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
64
65 /* Texture only formats. */
66 case TextureFormat::UINT_32_32_32:
67 case TextureFormat::UINT_16_16_16:
68 case TextureFormat::UINT_8_8_8:
69 case TextureFormat::SINT_32_32_32:
70 case TextureFormat::SINT_16_16_16:
71 case TextureFormat::SINT_8_8_8:
72 case TextureFormat::UNORM_16_16_16:
73 case TextureFormat::UNORM_8_8_8:
74 case TextureFormat::SNORM_16_16_16_16:
75 case TextureFormat::SNORM_16_16_16:
76 case TextureFormat::SNORM_16_16:
77 case TextureFormat::SNORM_16:
78 case TextureFormat::SNORM_8_8_8_8:
79 case TextureFormat::SNORM_8_8_8:
80 case TextureFormat::SNORM_8_8:
81 case TextureFormat::SNORM_8:
82 case TextureFormat::SFLOAT_32_32_32:
83 case TextureFormat::SFLOAT_16_16_16:
84 return VK_IMAGE_ASPECT_COLOR_BIT;
85
86 /* Special formats, texture only. */
87 case TextureFormat::SRGB_DXT1:
88 case TextureFormat::SRGB_DXT3:
89 case TextureFormat::SRGB_DXT5:
90 case TextureFormat::SNORM_DXT1:
91 case TextureFormat::SNORM_DXT3:
92 case TextureFormat::SNORM_DXT5:
93 case TextureFormat::SRGBA_8_8_8:
94 case TextureFormat::UFLOAT_9_9_9_EXP_5:
95 return VK_IMAGE_ASPECT_COLOR_BIT;
96
99 break;
100 }
102 return 0;
103}
104
106{
107 VkImageAspectFlags result = 0;
108 if (buffers & GPU_COLOR_BIT) {
109 result |= VK_IMAGE_ASPECT_COLOR_BIT;
110 }
111 if (buffers & GPU_DEPTH_BIT) {
112 result |= VK_IMAGE_ASPECT_DEPTH_BIT;
113 }
114 if (buffers & GPU_STENCIL_BIT) {
115 result |= VK_IMAGE_ASPECT_STENCIL_BIT;
116 }
117 return result;
118}
119
121{
122 switch (format) {
123 case VK_FORMAT_R8G8B8A8_UNORM:
124 case VK_FORMAT_B8G8R8A8_UNORM:
125 return TextureFormat::UNORM_8_8_8_8;
126
127 case VK_FORMAT_R16G16B16A16_SFLOAT:
128 return TextureFormat::SFLOAT_16_16_16_16;
129
130 default:
132 }
133 return TextureFormat::SFLOAT_32_32_32_32;
134}
135
137{
138#define CASE(a, b, c, blender_enum, vk_enum, e, f, g, h) \
139 case TextureFormat::blender_enum: \
140 return VK_FORMAT_##vk_enum;
141
142 switch (format) {
145 break;
146 }
147#undef CASE
148 return VK_FORMAT_UNDEFINED;
149}
150
151static VkFormat to_vk_format_norm(const GPUVertCompType type, const uint32_t size)
152{
153 switch (type) {
154 case GPU_COMP_I8:
155 switch (size) {
156 case 1:
157 return VK_FORMAT_R8_SNORM;
158 case 2:
159 return VK_FORMAT_R8G8_SNORM;
160 case 3:
161 return VK_FORMAT_R8G8B8_SNORM;
162 case 4:
163 return VK_FORMAT_R8G8B8A8_SNORM;
164 case 16:
165 return VK_FORMAT_R8G8B8A8_SNORM;
166 default:
168 return VK_FORMAT_R8_SNORM;
169 }
170 break;
171
172 case GPU_COMP_U8:
173 switch (size) {
174 case 1:
175 return VK_FORMAT_R8_UNORM;
176 case 2:
177 return VK_FORMAT_R8G8_UNORM;
178 case 3:
179 return VK_FORMAT_R8G8B8_UNORM;
180 case 4:
181 return VK_FORMAT_R8G8B8A8_UNORM;
182 case 16:
183 return VK_FORMAT_R8G8B8A8_UNORM;
184 default:
186 return VK_FORMAT_R8_UNORM;
187 }
188 break;
189
190 case GPU_COMP_I16:
191 switch (size) {
192 case 2:
193 return VK_FORMAT_R16_SNORM;
194 case 4:
195 return VK_FORMAT_R16G16_SNORM;
196 case 6:
197 return VK_FORMAT_R16G16B16_SNORM;
198 case 8:
199 return VK_FORMAT_R16G16B16A16_SNORM;
200 default:
202 return VK_FORMAT_R16_SNORM;
203 }
204 break;
205
206 case GPU_COMP_U16:
207 switch (size) {
208 case 2:
209 return VK_FORMAT_R16_UNORM;
210 case 4:
211 return VK_FORMAT_R16G16_UNORM;
212 case 6:
213 return VK_FORMAT_R16G16B16_UNORM;
214 case 8:
215 return VK_FORMAT_R16G16B16A16_UNORM;
216 default:
218 return VK_FORMAT_R16_UNORM;
219 }
220 break;
221
222 case GPU_COMP_I10:
223 BLI_assert(size == 4);
224 return VK_FORMAT_A2B10G10R10_SNORM_PACK32;
225
226 case GPU_COMP_I32:
227 case GPU_COMP_U32:
228 case GPU_COMP_F32:
229 default:
230 break;
231 }
233 return VK_FORMAT_R32_SFLOAT;
234}
235
236static VkFormat to_vk_format_float(const GPUVertCompType type, const uint32_t size)
237{
238 switch (type) {
239 case GPU_COMP_F32:
240 switch (size) {
241 case 4:
242 return VK_FORMAT_R32_SFLOAT;
243 case 8:
244 return VK_FORMAT_R32G32_SFLOAT;
245 case 12:
246 return VK_FORMAT_R32G32B32_SFLOAT;
247 case 16:
248 return VK_FORMAT_R32G32B32A32_SFLOAT;
249 case 64:
250 return VK_FORMAT_R32G32B32A32_SFLOAT;
251 default:
253 return VK_FORMAT_R32_SFLOAT;
254 }
255
256 default:
257 break;
258 }
260 return VK_FORMAT_R32_SFLOAT;
261}
262
263static VkFormat to_vk_format_int(const GPUVertCompType type, const uint32_t size)
264{
265 switch (type) {
266 case GPU_COMP_I8:
267 switch (size) {
268 case 1:
269 return VK_FORMAT_R8_SINT;
270 case 2:
271 return VK_FORMAT_R8G8_SINT;
272 case 3:
273 return VK_FORMAT_R8G8B8_SINT;
274 case 4:
275 return VK_FORMAT_R8G8B8A8_SINT;
276 default:
278 return VK_FORMAT_R8_SINT;
279 }
280 break;
281
282 case GPU_COMP_U8:
283 switch (size) {
284 case 1:
285 return VK_FORMAT_R8_UINT;
286 case 2:
287 return VK_FORMAT_R8G8_UINT;
288 case 3:
289 return VK_FORMAT_R8G8B8_UINT;
290 case 4:
291 return VK_FORMAT_R8G8B8A8_UINT;
292 default:
294 return VK_FORMAT_R8_UINT;
295 }
296 break;
297
298 case GPU_COMP_I16:
299 switch (size) {
300 case 2:
301 return VK_FORMAT_R16_SINT;
302 case 4:
303 return VK_FORMAT_R16G16_SINT;
304 case 6:
305 return VK_FORMAT_R16G16B16_SINT;
306 case 8:
307 return VK_FORMAT_R16G16B16A16_SINT;
308 default:
310 return VK_FORMAT_R16_SINT;
311 }
312 break;
313
314 case GPU_COMP_U16:
315 switch (size) {
316 case 2:
317 return VK_FORMAT_R16_UINT;
318 case 4:
319 return VK_FORMAT_R16G16_UINT;
320 case 6:
321 return VK_FORMAT_R16G16B16_UINT;
322 case 8:
323 return VK_FORMAT_R16G16B16A16_UINT;
324 default:
326 return VK_FORMAT_R16_UINT;
327 }
328 break;
329
330 case GPU_COMP_I32:
331 switch (size) {
332 case 4:
333 return VK_FORMAT_R32_SINT;
334 case 8:
335 return VK_FORMAT_R32G32_SINT;
336 case 12:
337 return VK_FORMAT_R32G32B32_SINT;
338 case 16:
339 return VK_FORMAT_R32G32B32A32_SINT;
340 default:
342 return VK_FORMAT_R32_SINT;
343 }
344 break;
345
346 case GPU_COMP_U32:
347 switch (size) {
348 case 4:
349 return VK_FORMAT_R32_UINT;
350 case 8:
351 return VK_FORMAT_R32G32_UINT;
352 case 12:
353 return VK_FORMAT_R32G32B32_UINT;
354 case 16:
355 return VK_FORMAT_R32G32B32A32_UINT;
356 default:
358 return VK_FORMAT_R32_UINT;
359 }
360 break;
361
362 case GPU_COMP_F32:
363 switch (size) {
364 case 4:
365 return VK_FORMAT_R32_SINT;
366 case 8:
367 return VK_FORMAT_R32G32_SINT;
368 case 12:
369 return VK_FORMAT_R32G32B32_SINT;
370 case 16:
371 return VK_FORMAT_R32G32B32A32_SINT;
372 default:
374 return VK_FORMAT_R32_SINT;
375 }
376 break;
377
378 case GPU_COMP_I10:
379 BLI_assert(size == 4);
380 return VK_FORMAT_A2B10G10R10_SINT_PACK32;
381
382 default:
383 break;
384 }
385
387 return VK_FORMAT_R32_SFLOAT;
388}
389
390VkFormat to_vk_format(const GPUVertCompType type, const uint32_t size, GPUVertFetchMode fetch_mode)
391{
392 switch (fetch_mode) {
393 case GPU_FETCH_FLOAT:
394 return to_vk_format_float(type, size);
395 case GPU_FETCH_INT:
396 return to_vk_format_int(type, size);
397 break;
399 return to_vk_format_norm(type, size);
400 break;
401 default:
402 break;
403 }
404
406 return VK_FORMAT_R32_SFLOAT;
407}
408
409VkFormat to_vk_format(const shader::Type type)
410{
411 switch (type) {
413 return VK_FORMAT_R32_SFLOAT;
415 return VK_FORMAT_R32G32_SFLOAT;
417 return VK_FORMAT_R32G32B32_SFLOAT;
419 return VK_FORMAT_R32G32B32A32_SFLOAT;
421 return VK_FORMAT_R32_UINT;
423 return VK_FORMAT_R32G32_UINT;
425 return VK_FORMAT_R32G32B32_UINT;
427 return VK_FORMAT_R32G32B32A32_UINT;
429 return VK_FORMAT_R32_SINT;
431 return VK_FORMAT_R32G32_SINT;
433 return VK_FORMAT_R32G32B32_SINT;
435 return VK_FORMAT_R32G32B32A32_SINT;
437 return VK_FORMAT_R32G32B32A32_SFLOAT;
438
458 break;
459 }
460
462 return VK_FORMAT_R32G32B32A32_SFLOAT;
463}
464
465VkQueryType to_vk_query_type(const GPUQueryType query_type)
466{
467 switch (query_type) {
469 return VK_QUERY_TYPE_OCCLUSION;
470 }
472 return VK_QUERY_TYPE_OCCLUSION;
473}
474
475VkImageType to_vk_image_type(const GPUTextureType type)
476{
477 /* See
478 * https://vulkan.lunarg.com/doc/view/1.3.243.0/linux/1.3-extensions/vkspec.html#resources-image-views-compatibility
479 * for reference */
480 switch (type) {
481 case GPU_TEXTURE_1D:
484 return VK_IMAGE_TYPE_1D;
485
486 case GPU_TEXTURE_2D:
488 case GPU_TEXTURE_CUBE:
490 return VK_IMAGE_TYPE_2D;
491
492 case GPU_TEXTURE_3D:
493 return VK_IMAGE_TYPE_3D;
494
496 /* GPU_TEXTURE_ARRAY should always be used together with 1D, 2D, or CUBE. */
497 break;
498 }
499
501 return VK_IMAGE_TYPE_1D;
502}
503
504VkImageViewType to_vk_image_view_type(const GPUTextureType type,
505 const eImageViewUsage view_type,
506 VKImageViewArrayed arrayed)
507{
508 VkImageViewType result = VK_IMAGE_VIEW_TYPE_1D;
509
510 switch (type) {
511 case GPU_TEXTURE_1D:
513 result = VK_IMAGE_VIEW_TYPE_1D;
514 break;
515 case GPU_TEXTURE_2D:
516 result = VK_IMAGE_VIEW_TYPE_2D;
517 break;
518 case GPU_TEXTURE_3D:
519 result = VK_IMAGE_VIEW_TYPE_3D;
520 break;
521 case GPU_TEXTURE_CUBE:
522 result = view_type == eImageViewUsage::Attachment ? VK_IMAGE_VIEW_TYPE_2D_ARRAY :
523 VK_IMAGE_VIEW_TYPE_CUBE;
524 break;
526 result = VK_IMAGE_VIEW_TYPE_1D_ARRAY;
527 break;
529 result = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
530 break;
532 result = view_type == eImageViewUsage::Attachment ? VK_IMAGE_VIEW_TYPE_2D_ARRAY :
533 VK_IMAGE_VIEW_TYPE_CUBE_ARRAY;
534 break;
535
537 /* GPU_TEXTURE_ARRAY should always be used together with 1D, 2D, or CUBE. */
538 break;
539 }
540
541 if (arrayed == VKImageViewArrayed::NOT_ARRAYED) {
542 if (result == VK_IMAGE_VIEW_TYPE_1D_ARRAY) {
543 result = VK_IMAGE_VIEW_TYPE_1D;
544 }
545 else if (result == VK_IMAGE_VIEW_TYPE_2D_ARRAY) {
546 result = VK_IMAGE_VIEW_TYPE_2D;
547 }
548 else if (result == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY) {
549 result = VK_IMAGE_VIEW_TYPE_CUBE;
550 }
551 }
552 else if (arrayed == VKImageViewArrayed::ARRAYED) {
553 if (result == VK_IMAGE_VIEW_TYPE_1D) {
554 result = VK_IMAGE_VIEW_TYPE_1D_ARRAY;
555 }
556 else if (result == VK_IMAGE_VIEW_TYPE_2D) {
557 result = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
558 }
559 else if (result == VK_IMAGE_VIEW_TYPE_CUBE) {
560 result = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY;
561 }
562 }
563
564 return result;
565}
566
567VkComponentSwizzle to_vk_component_swizzle(const char swizzle)
568{
569 switch (swizzle) {
570 case '0':
571 return VK_COMPONENT_SWIZZLE_ZERO;
572 case '1':
573 return VK_COMPONENT_SWIZZLE_ONE;
574 case 'r':
575 return VK_COMPONENT_SWIZZLE_R;
576 case 'g':
577 return VK_COMPONENT_SWIZZLE_G;
578 case 'b':
579 return VK_COMPONENT_SWIZZLE_B;
580 case 'a':
581 return VK_COMPONENT_SWIZZLE_A;
582
583 default:
584 break;
585 }
587 return VK_COMPONENT_SWIZZLE_IDENTITY;
588}
589
590template<typename T> void copy_color(T dst[4], const T *src)
591{
592 dst[0] = src[0];
593 dst[1] = src[1];
594 dst[2] = src[2];
595 dst[3] = src[3];
596}
597
598VkClearColorValue to_vk_clear_color_value(const eGPUDataFormat format, const void *data)
599{
600 VkClearColorValue result = {{0.0f}};
601 switch (format) {
602 /* All float-like formats (i.e. everything except literal int/uint go
603 * into VkClearColorValue float color fields. */
604 case GPU_DATA_FLOAT:
606 case GPU_DATA_UBYTE:
609 const float *float_data = static_cast<const float *>(data);
610 copy_color<float>(result.float32, float_data);
611 break;
612 }
613
614 case GPU_DATA_INT: {
615 const int32_t *int_data = static_cast<const int32_t *>(data);
616 copy_color<int32_t>(result.int32, int_data);
617 break;
618 }
619
620 case GPU_DATA_UINT: {
621 const uint32_t *uint_data = static_cast<const uint32_t *>(data);
622 copy_color<uint32_t>(result.uint32, uint_data);
623 break;
624 }
627 break;
628 }
629 }
630 return result;
631}
632
633VkIndexType to_vk_index_type(const GPUIndexBufType index_type)
634{
635 switch (index_type) {
636 case GPU_INDEX_U16:
637 return VK_INDEX_TYPE_UINT16;
638 case GPU_INDEX_U32:
639 return VK_INDEX_TYPE_UINT32;
640 default:
641 break;
642 }
644 return VK_INDEX_TYPE_UINT16;
645}
646
647VkPrimitiveTopology to_vk_primitive_topology(const GPUPrimType prim_type)
648{
649 switch (prim_type) {
650 case GPU_PRIM_POINTS:
651 return VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
652 case GPU_PRIM_LINES:
653 return VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
654 case GPU_PRIM_TRIS:
655 return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
657 return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP;
659 return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP;
661 return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP;
662 case GPU_PRIM_TRI_FAN:
663 return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN;
665 return VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY;
667 return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY;
669 return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY;
670
671 case GPU_PRIM_NONE:
672 break;
673 }
674
676 return VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
677}
678
679VkCullModeFlags to_vk_cull_mode_flags(const GPUFaceCullTest cull_test)
680{
681 switch (cull_test) {
682 case GPU_CULL_FRONT:
683 return VK_CULL_MODE_FRONT_BIT;
684 case GPU_CULL_BACK:
685 return VK_CULL_MODE_BACK_BIT;
686 case GPU_CULL_NONE:
687 return VK_CULL_MODE_NONE;
688 }
690 return VK_CULL_MODE_NONE;
691}
692
693VkSamplerAddressMode to_vk_sampler_address_mode(const GPUSamplerExtendMode extend_mode)
694{
695 switch (extend_mode) {
697 return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
699 return VK_SAMPLER_ADDRESS_MODE_REPEAT;
701 return VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT;
703 return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
704 }
705
707 return VK_SAMPLER_ADDRESS_MODE_REPEAT;
708}
709
710static VkDescriptorType to_vk_descriptor_type_image(const shader::ImageType &image_type)
711{
712 switch (image_type) {
713 case shader::ImageType::Float1D:
714 case shader::ImageType::Float1DArray:
715 case shader::ImageType::Float2D:
716 case shader::ImageType::Float2DArray:
717 case shader::ImageType::Float3D:
718 case shader::ImageType::FloatCube:
719 case shader::ImageType::FloatCubeArray:
720 case shader::ImageType::Int1D:
721 case shader::ImageType::Int1DArray:
722 case shader::ImageType::Int2D:
723 case shader::ImageType::Int2DArray:
724 case shader::ImageType::Int3D:
725 case shader::ImageType::IntCube:
726 case shader::ImageType::IntCubeArray:
727 case shader::ImageType::AtomicInt2D:
728 case shader::ImageType::AtomicInt2DArray:
729 case shader::ImageType::AtomicInt3D:
730 case shader::ImageType::Uint1D:
731 case shader::ImageType::Uint1DArray:
732 case shader::ImageType::Uint2D:
733 case shader::ImageType::Uint2DArray:
734 case shader::ImageType::Uint3D:
735 case shader::ImageType::UintCube:
736 case shader::ImageType::UintCubeArray:
737 case shader::ImageType::AtomicUint2D:
738 case shader::ImageType::AtomicUint2DArray:
739 case shader::ImageType::AtomicUint3D:
740 return VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
741
742 case shader::ImageType::FloatBuffer:
743 case shader::ImageType::IntBuffer:
744 case shader::ImageType::UintBuffer:
745 return VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER;
746
747 default:
748 BLI_assert_msg(false, "ImageType not supported.");
749 }
750
751 return VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
752}
753
754static VkDescriptorType to_vk_descriptor_type_sampler(const shader::ImageType &image_type)
755{
756 switch (image_type) {
758 case shader::ImageType::Float1D:
759 case shader::ImageType::Float1DArray:
760 case shader::ImageType::Float2D:
761 case shader::ImageType::Float2DArray:
762 case shader::ImageType::Float3D:
763 case shader::ImageType::FloatCube:
764 case shader::ImageType::FloatCubeArray:
765 case shader::ImageType::Int1D:
766 case shader::ImageType::Int1DArray:
767 case shader::ImageType::Int2D:
768 case shader::ImageType::Int2DArray:
769 case shader::ImageType::Int3D:
770 case shader::ImageType::IntCube:
771 case shader::ImageType::IntCubeArray:
772 case shader::ImageType::AtomicInt2D:
773 case shader::ImageType::AtomicInt2DArray:
774 case shader::ImageType::AtomicInt3D:
775 case shader::ImageType::Uint1D:
776 case shader::ImageType::Uint1DArray:
777 case shader::ImageType::Uint2D:
778 case shader::ImageType::Uint2DArray:
779 case shader::ImageType::Uint3D:
780 case shader::ImageType::UintCube:
781 case shader::ImageType::UintCubeArray:
782 case shader::ImageType::AtomicUint2D:
783 case shader::ImageType::AtomicUint2DArray:
784 case shader::ImageType::AtomicUint3D:
785 case shader::ImageType::Shadow2D:
786 case shader::ImageType::Shadow2DArray:
787 case shader::ImageType::ShadowCube:
788 case shader::ImageType::ShadowCubeArray:
789 case shader::ImageType::Depth2D:
790 case shader::ImageType::Depth2DArray:
791 case shader::ImageType::DepthCube:
792 case shader::ImageType::DepthCubeArray:
793 return VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
794
795 case shader::ImageType::FloatBuffer:
796 case shader::ImageType::IntBuffer:
797 case shader::ImageType::UintBuffer:
798 return VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
799 }
800
801 return VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
802}
803
805{
806 switch (resource.bind_type) {
808 return to_vk_descriptor_type_image(resource.image.type);
810 return to_vk_descriptor_type_sampler(resource.sampler.type);
812 return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
814 return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
815 }
817 return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
818}
819
820} // namespace blender::gpu
#define BLI_assert_unreachable()
Definition BLI_assert.h:93
#define BLI_assert(a)
Definition BLI_assert.h:46
#define BLI_assert_msg(a, msg)
Definition BLI_assert.h:53
#define CASE(a, size, c, blender_enum, d, e, f, g, h)
GPUFrameBufferBits
@ GPU_DEPTH_BIT
@ GPU_STENCIL_BIT
@ GPU_COLOR_BIT
GPUPrimType
@ GPU_PRIM_TRI_FAN
@ GPU_PRIM_LINE_LOOP
@ GPU_PRIM_LINE_STRIP_ADJ
@ GPU_PRIM_TRIS_ADJ
@ GPU_PRIM_NONE
@ GPU_PRIM_LINES
@ GPU_PRIM_POINTS
@ GPU_PRIM_LINES_ADJ
@ GPU_PRIM_LINE_STRIP
@ GPU_PRIM_TRI_STRIP
@ GPU_PRIM_TRIS
GPUFaceCullTest
Definition GPU_state.hh:135
@ GPU_CULL_FRONT
Definition GPU_state.hh:137
@ GPU_CULL_NONE
Definition GPU_state.hh:136
@ GPU_CULL_BACK
Definition GPU_state.hh:138
#define GPU_TEXTURE_FORMAT_EXPAND(impl)
eGPUDataFormat
@ GPU_DATA_HALF_FLOAT
@ GPU_DATA_INT
@ GPU_DATA_10_11_11_REV
@ GPU_DATA_UBYTE
@ GPU_DATA_UINT
@ GPU_DATA_UINT_24_8_DEPRECATED
@ GPU_DATA_2_10_10_10_REV
@ GPU_DATA_FLOAT
GPUSamplerExtendMode
@ GPU_SAMPLER_EXTEND_MODE_MIRRORED_REPEAT
@ GPU_SAMPLER_EXTEND_MODE_REPEAT
@ GPU_SAMPLER_EXTEND_MODE_EXTEND
@ GPU_SAMPLER_EXTEND_MODE_CLAMP_TO_BORDER
GPUVertFetchMode
@ GPU_FETCH_FLOAT
@ GPU_FETCH_INT_TO_FLOAT_UNIT
@ GPU_FETCH_INT
GPUVertCompType
@ GPU_COMP_U16
@ GPU_COMP_I10
@ GPU_COMP_F32
@ GPU_COMP_I32
@ GPU_COMP_I8
@ GPU_COMP_U32
@ GPU_COMP_I16
@ GPU_COMP_U8
BMesh const char void * data
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
#define resource
format
#define T
VkQueryType to_vk_query_type(const GPUQueryType query_type)
Definition vk_common.cc:465
VkImageViewType to_vk_image_view_type(const GPUTextureType type, const eImageViewUsage view_type, VKImageViewArrayed arrayed)
Definition vk_common.cc:504
static VkFormat to_vk_format_norm(const GPUVertCompType type, const uint32_t size)
Definition vk_common.cc:151
VkImageType to_vk_image_type(const GPUTextureType type)
Definition vk_common.cc:475
VkFormat to_vk_format(const TextureFormat format)
Definition vk_common.cc:136
static VkFormat to_vk_format_int(const GPUVertCompType type, const uint32_t size)
Definition vk_common.cc:263
VkIndexType to_vk_index_type(const GPUIndexBufType index_type)
Definition vk_common.cc:633
@ GPU_QUERY_OCCLUSION
Definition gpu_query.hh:18
VkComponentSwizzle to_vk_component_swizzle(const char swizzle)
Definition vk_common.cc:567
static VkDescriptorType to_vk_descriptor_type_image(const shader::ImageType &image_type)
Definition vk_common.cc:710
static VkDescriptorType to_vk_descriptor_type_sampler(const shader::ImageType &image_type)
Definition vk_common.cc:754
VkDescriptorType to_vk_descriptor_type(const shader::ShaderCreateInfo::Resource &resource)
Definition vk_common.cc:804
VkSamplerAddressMode to_vk_sampler_address_mode(const GPUSamplerExtendMode extend_mode)
Definition vk_common.cc:693
VkPrimitiveTopology to_vk_primitive_topology(const GPUPrimType prim_type)
Definition vk_common.cc:647
VkCullModeFlags to_vk_cull_mode_flags(const GPUFaceCullTest cull_test)
Definition vk_common.cc:679
VkClearColorValue to_vk_clear_color_value(const eGPUDataFormat format, const void *data)
Definition vk_common.cc:598
TextureFormat to_gpu_format(const VkFormat format)
Definition vk_common.cc:120
static VkFormat to_vk_format_float(const GPUVertCompType type, const uint32_t size)
Definition vk_common.cc:236
void copy_color(T dst[4], const T *src)
Definition vk_common.cc:590
VkImageAspectFlags to_vk_image_aspect_flag_bits(const TextureFormat format)
Definition vk_common.cc:14
char * buffers[2]