Blender V4.3
vk_common.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include <typeinfo>
12
13#ifdef __APPLE__
14# include <MoltenVK/vk_mvk_moltenvk.h>
15#else
16# include <vulkan/vulkan.h>
17#endif
18
19#include "vk_mem_alloc.h"
20
21#include "GPU_index_buffer.hh"
22#include "gpu_query.hh"
25
26namespace blender::gpu {
27
35enum class eImageViewUsage {
40};
41
45 ARRAYED,
46};
47
52VkFormat to_vk_format(const GPUVertCompType type,
53 const uint32_t size,
54 const GPUVertFetchMode fetch_mode);
55VkFormat to_vk_format(const shader::Type type);
56VkQueryType to_vk_query_type(const GPUQueryType query_type);
57
58VkComponentSwizzle to_vk_component_swizzle(const char swizzle);
59VkImageViewType to_vk_image_view_type(const eGPUTextureType type,
60 eImageViewUsage view_type,
61 VKImageViewArrayed arrayed);
62VkImageType to_vk_image_type(const eGPUTextureType type);
63VkClearColorValue to_vk_clear_color_value(const eGPUDataFormat format, const void *data);
64VkIndexType to_vk_index_type(const GPUIndexBufType index_type);
65VkPrimitiveTopology to_vk_primitive_topology(const GPUPrimType prim_type);
66VkCullModeFlags to_vk_cull_mode_flags(const eGPUFaceCullTest cull_test);
67VkSamplerAddressMode to_vk_sampler_address_mode(const GPUSamplerExtendMode extend_mode);
68VkDescriptorType to_vk_descriptor_type(const shader::ShaderCreateInfo::Resource &resource);
69
70template<typename T> VkObjectType to_vk_object_type(T /*vk_obj*/)
71{
72 const std::type_info &tid = typeid(T);
73#define VK_EQ_TYPEID(name, name2) \
74 if (tid == typeid(name)) { \
75 return VK_OBJECT_TYPE_##name2; \
76 }
77
78 VK_EQ_TYPEID(VkInstance, INSTANCE);
79 VK_EQ_TYPEID(VkPhysicalDevice, PHYSICAL_DEVICE);
80 VK_EQ_TYPEID(VkDevice, DEVICE);
81 VK_EQ_TYPEID(VkQueue, QUEUE);
82 VK_EQ_TYPEID(VkSemaphore, SEMAPHORE);
83 VK_EQ_TYPEID(VkCommandBuffer, COMMAND_BUFFER);
84 VK_EQ_TYPEID(VkFence, FENCE);
85 VK_EQ_TYPEID(VkDeviceMemory, DEVICE_MEMORY);
86 VK_EQ_TYPEID(VkBuffer, BUFFER);
87 VK_EQ_TYPEID(VkImage, IMAGE);
88 VK_EQ_TYPEID(VkEvent, EVENT);
89 VK_EQ_TYPEID(VkQueryPool, QUERY_POOL);
90 VK_EQ_TYPEID(VkBufferView, BUFFER_VIEW);
91 VK_EQ_TYPEID(VkImageView, IMAGE_VIEW);
92 VK_EQ_TYPEID(VkShaderModule, SHADER_MODULE);
93 VK_EQ_TYPEID(VkPipelineCache, PIPELINE_CACHE);
94 VK_EQ_TYPEID(VkPipelineLayout, PIPELINE_LAYOUT);
95 VK_EQ_TYPEID(VkRenderPass, RENDER_PASS);
96 VK_EQ_TYPEID(VkPipeline, PIPELINE);
97 VK_EQ_TYPEID(VkDescriptorSetLayout, DESCRIPTOR_SET_LAYOUT);
98 VK_EQ_TYPEID(VkSampler, SAMPLER);
99 VK_EQ_TYPEID(VkDescriptorPool, DESCRIPTOR_POOL);
100 VK_EQ_TYPEID(VkDescriptorSet, DESCRIPTOR_SET);
101 VK_EQ_TYPEID(VkFramebuffer, FRAMEBUFFER);
102 VK_EQ_TYPEID(VkCommandPool, COMMAND_POOL);
103 VK_EQ_TYPEID(VkSamplerYcbcrConversion, SAMPLER_YCBCR_CONVERSION);
104 VK_EQ_TYPEID(VkDescriptorUpdateTemplate, DESCRIPTOR_UPDATE_TEMPLATE);
105 VK_EQ_TYPEID(VkSurfaceKHR, SURFACE_KHR);
106 VK_EQ_TYPEID(VkSwapchainKHR, SWAPCHAIN_KHR);
107 VK_EQ_TYPEID(VkDisplayKHR, DISPLAY_KHR);
108 VK_EQ_TYPEID(VkDisplayModeKHR, DISPLAY_MODE_KHR);
109 VK_EQ_TYPEID(VkDebugReportCallbackEXT, DEBUG_REPORT_CALLBACK_EXT);
110#ifdef VK_ENABLE_BETA_EXTENSIONS
111 VK_EQ_TYPEID(VkVideoSessionKHR, VIDEO_SESSION_KHR);
112#endif
113#ifdef VK_ENABLE_BETA_EXTENSIONS
114 VK_EQ_TYPEID(VkVideoSessionParametersKHR, VIDEO_SESSION_PARAMETERS_KHR);
115#endif
116 VK_EQ_TYPEID(VkCuModuleNVX, CU_MODULE_NVX);
117 VK_EQ_TYPEID(VkCuFunctionNVX, CU_FUNCTION_NVX);
118 VK_EQ_TYPEID(VkDebugUtilsMessengerEXT, DEBUG_UTILS_MESSENGER_EXT);
119 VK_EQ_TYPEID(VkAccelerationStructureKHR, ACCELERATION_STRUCTURE_KHR);
120 VK_EQ_TYPEID(VkValidationCacheEXT, VALIDATION_CACHE_EXT);
121 VK_EQ_TYPEID(VkAccelerationStructureNV, ACCELERATION_STRUCTURE_NV);
122 VK_EQ_TYPEID(VkPerformanceConfigurationINTEL, PERFORMANCE_CONFIGURATION_INTEL);
123 VK_EQ_TYPEID(VkDeferredOperationKHR, DEFERRED_OPERATION_KHR);
124 VK_EQ_TYPEID(VkIndirectCommandsLayoutNV, INDIRECT_COMMANDS_LAYOUT_NV);
125 VK_EQ_TYPEID(VkPrivateDataSlotEXT, PRIVATE_DATA_SLOT_EXT);
126
128#undef VK_EQ_TYPEID
129 return VK_OBJECT_TYPE_UNKNOWN;
130}
131
132#define NOT_YET_IMPLEMENTED \
133 printf("%s:%d `%s` not implemented yet\n", __FILE__, __LINE__, __func__);
134
135} // namespace blender::gpu
#define BLI_assert_unreachable()
Definition BLI_assert.h:97
eGPUFrameBufferBits
GPUPrimType
eGPUFaceCullTest
Definition GPU_state.hh:132
eGPUDataFormat
GPUSamplerExtendMode
eGPUTextureFormat
GPUVertFetchMode
GPUVertCompType
format
#define T
VkQueryType to_vk_query_type(const GPUQueryType query_type)
Definition vk_common.cc:672
VkIndexType to_vk_index_type(const GPUIndexBufType index_type)
Definition vk_common.cc:839
VkObjectType to_vk_object_type(T)
Definition vk_common.hh:70
VkComponentSwizzle to_vk_component_swizzle(const char swizzle)
Definition vk_common.cc:774
VkDescriptorType to_vk_descriptor_type(const shader::ShaderCreateInfo::Resource &resource)
VkSamplerAddressMode to_vk_sampler_address_mode(const GPUSamplerExtendMode extend_mode)
Definition vk_common.cc:899
eGPUTextureFormat to_gpu_format(const VkFormat format)
Definition vk_common.cc:118
VkPrimitiveTopology to_vk_primitive_topology(const GPUPrimType prim_type)
Definition vk_common.cc:853
VkImageType to_vk_image_type(const eGPUTextureType type)
Definition vk_common.cc:682
VkFormat to_vk_format(const eGPUTextureFormat format)
Definition vk_common.cc:131
VkClearColorValue to_vk_clear_color_value(const eGPUDataFormat format, const void *data)
Definition vk_common.cc:805
VkImageAspectFlags to_vk_image_aspect_flag_bits(const eGPUTextureFormat format)
Definition vk_common.cc:14
VkImageViewType to_vk_image_view_type(const eGPUTextureType type, const eImageViewUsage view_type, VKImageViewArrayed arrayed)
Definition vk_common.cc:711
VkCullModeFlags to_vk_cull_mode_flags(const eGPUFaceCullTest cull_test)
Definition vk_common.cc:885
unsigned int uint32_t
Definition stdint.h:80
Definition iris.cc:23
#define VK_EQ_TYPEID(name, name2)
char * buffers[2]