Kohi Game Engine
vulkan_platform.h
Go to the documentation of this file.
1 
13 #pragma once
14 
15 #include <vulkan/vulkan_core.h>
16 
17 #include <defines.h>
18 #include <platform/platform.h>
19 
20 struct kwindow;
21 struct vulkan_context;
22 struct VkPhysicalDevice_T;
23 
24 #define RHI_VULKAN_DECL(name) PFN_##name k##name
25 
26 // The Vulkan Render Hardware Interface.
27 typedef struct krhi_vulkan {
29 
30  VkInstance instance;
31  VkDevice device;
32 
33  // Core functions
34 
35  RHI_VULKAN_DECL(vkGetInstanceProcAddr);
36 
37  // Instance functions
38 
39  RHI_VULKAN_DECL(vkEnumerateInstanceExtensionProperties);
40  RHI_VULKAN_DECL(vkEnumerateInstanceVersion);
41  RHI_VULKAN_DECL(vkEnumerateInstanceLayerProperties);
42  RHI_VULKAN_DECL(vkCreateInstance);
43  RHI_VULKAN_DECL(vkDestroyInstance);
44  RHI_VULKAN_DECL(vkEnumeratePhysicalDevices);
45  RHI_VULKAN_DECL(vkGetDeviceProcAddr);
46  RHI_VULKAN_DECL(vkGetPhysicalDeviceProperties);
47  RHI_VULKAN_DECL(vkGetPhysicalDeviceProperties2);
48  RHI_VULKAN_DECL(vkGetPhysicalDeviceFeatures);
49  RHI_VULKAN_DECL(vkGetPhysicalDeviceFeatures2);
50  RHI_VULKAN_DECL(vkGetPhysicalDeviceMemoryProperties);
51  RHI_VULKAN_DECL(vkGetPhysicalDeviceQueueFamilyProperties);
52  RHI_VULKAN_DECL(vkGetPhysicalDeviceFormatProperties);
53  RHI_VULKAN_DECL(vkGetPhysicalDeviceSurfaceFormatsKHR);
54  RHI_VULKAN_DECL(vkGetPhysicalDeviceSurfaceCapabilitiesKHR);
55  RHI_VULKAN_DECL(vkGetPhysicalDeviceSurfacePresentModesKHR);
56  RHI_VULKAN_DECL(vkEnumerateDeviceExtensionProperties);
57  RHI_VULKAN_DECL(vkCreateDevice);
58  RHI_VULKAN_DECL(vkDestroySurfaceKHR);
59 
60  // Device functions.
61  RHI_VULKAN_DECL(vkGetDeviceQueue);
62  RHI_VULKAN_DECL(vkDeviceWaitIdle);
63  RHI_VULKAN_DECL(vkCreateCommandPool);
64  RHI_VULKAN_DECL(vkDestroyCommandPool);
65  RHI_VULKAN_DECL(vkDestroyDevice);
66  RHI_VULKAN_DECL(vkCreateSwapchainKHR);
67  RHI_VULKAN_DECL(vkDestroySwapchainKHR);
68  RHI_VULKAN_DECL(vkGetSwapchainImagesKHR);
69  RHI_VULKAN_DECL(vkCreateImage);
70  RHI_VULKAN_DECL(vkCreateImageView);
71  RHI_VULKAN_DECL(vkDestroyImage);
72  RHI_VULKAN_DECL(vkDestroyImageView);
73  RHI_VULKAN_DECL(vkGetImageMemoryRequirements);
74  RHI_VULKAN_DECL(vkAllocateMemory);
75  RHI_VULKAN_DECL(vkFreeMemory);
76  RHI_VULKAN_DECL(vkAllocateCommandBuffers);
77  RHI_VULKAN_DECL(vkFreeCommandBuffers);
78  RHI_VULKAN_DECL(vkBeginCommandBuffer);
79  RHI_VULKAN_DECL(vkEndCommandBuffer);
80  RHI_VULKAN_DECL(vkBindImageMemory);
81  RHI_VULKAN_DECL(vkCreateSemaphore);
82  RHI_VULKAN_DECL(vkDestroySemaphore);
83  RHI_VULKAN_DECL(vkCreateFence);
84  RHI_VULKAN_DECL(vkDestroyFence);
85  RHI_VULKAN_DECL(vkWaitForFences);
86  RHI_VULKAN_DECL(vkAcquireNextImageKHR);
87  RHI_VULKAN_DECL(vkResetFences);
88  RHI_VULKAN_DECL(vkCreateDescriptorSetLayout);
89  RHI_VULKAN_DECL(vkDestroyDescriptorSetLayout);
90  RHI_VULKAN_DECL(vkCreateDescriptorPool);
91  RHI_VULKAN_DECL(vkDestroyDescriptorPool);
92  RHI_VULKAN_DECL(vkCreateShaderModule);
93  RHI_VULKAN_DECL(vkDestroyShaderModule);
94  RHI_VULKAN_DECL(vkCreateSampler);
95  RHI_VULKAN_DECL(vkDestroySampler);
96  RHI_VULKAN_DECL(vkCreateBuffer);
97  RHI_VULKAN_DECL(vkDestroyBuffer);
98  RHI_VULKAN_DECL(vkGetBufferMemoryRequirements);
99  RHI_VULKAN_DECL(vkBindBufferMemory);
100  RHI_VULKAN_DECL(vkMapMemory);
101  RHI_VULKAN_DECL(vkUnmapMemory);
102  RHI_VULKAN_DECL(vkFlushMappedMemoryRanges);
103  RHI_VULKAN_DECL(vkCreatePipelineLayout);
104  RHI_VULKAN_DECL(vkDestroyPipelineLayout);
105  RHI_VULKAN_DECL(vkCreateGraphicsPipelines);
106  RHI_VULKAN_DECL(vkDestroyPipeline);
107  RHI_VULKAN_DECL(vkAllocateDescriptorSets);
108  RHI_VULKAN_DECL(vkFreeDescriptorSets);
109  RHI_VULKAN_DECL(vkUpdateDescriptorSets);
110 
111  RHI_VULKAN_DECL(vkCmdBindPipeline);
112  RHI_VULKAN_DECL(vkCmdPipelineBarrier);
113  RHI_VULKAN_DECL(vkCmdBlitImage);
114  RHI_VULKAN_DECL(vkCmdCopyBuffer);
115  RHI_VULKAN_DECL(vkCmdCopyBufferToImage);
116  RHI_VULKAN_DECL(vkCmdCopyImageToBuffer);
117  RHI_VULKAN_DECL(vkCmdExecuteCommands);
118  RHI_VULKAN_DECL(vkCmdSetViewport);
119  RHI_VULKAN_DECL(vkCmdSetScissor);
120  RHI_VULKAN_DECL(vkCmdSetFrontFace);
121  RHI_VULKAN_DECL(vkCmdSetCullMode);
122  RHI_VULKAN_DECL(vkCmdSetStencilTestEnable);
123  RHI_VULKAN_DECL(vkCmdSetDepthTestEnable);
124  RHI_VULKAN_DECL(vkCmdSetDepthWriteEnable);
125  RHI_VULKAN_DECL(vkCmdSetStencilReference);
126  RHI_VULKAN_DECL(vkCmdSetStencilOp);
127  RHI_VULKAN_DECL(vkCmdBeginRendering);
128  RHI_VULKAN_DECL(vkCmdEndRendering);
129  RHI_VULKAN_DECL(vkCmdSetStencilCompareMask);
130  RHI_VULKAN_DECL(vkCmdSetStencilWriteMask);
131  RHI_VULKAN_DECL(vkCmdClearColorImage);
132  RHI_VULKAN_DECL(vkCmdClearDepthStencilImage);
133  RHI_VULKAN_DECL(vkCmdSetPrimitiveTopology);
134  RHI_VULKAN_DECL(vkCmdPushConstants);
135  RHI_VULKAN_DECL(vkCmdBindVertexBuffers);
136  RHI_VULKAN_DECL(vkCmdBindIndexBuffer);
137  RHI_VULKAN_DECL(vkCmdDraw);
138  RHI_VULKAN_DECL(vkCmdDrawIndexed);
139  RHI_VULKAN_DECL(vkCmdBindDescriptorSets);
140 
141  RHI_VULKAN_DECL(vkQueueSubmit);
142  RHI_VULKAN_DECL(vkQueueWaitIdle);
143  RHI_VULKAN_DECL(vkQueuePresentKHR);
144 
146 
154 
161 void vulkan_platform_get_required_extension_names(const char*** names_darray);
162 
166 b8 vulkan_platform_presentation_support(struct vulkan_context* context, struct VkPhysicalDevice_T* physical_device, u32 queue_family_index);
167 
This file contains global type definitions which are used throughout the entire engine and applicatio...
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:25
_Bool b8
8-bit boolean type
Definition: defines.h:58
This file contains the platform layer, or at least the interface to it. Each platform should provide ...
Definition: platform.h:30
Definition: vulkan_platform.h:27
RHI_VULKAN_DECL(vkCmdPipelineBarrier)
RHI_VULKAN_DECL(vkGetPhysicalDeviceProperties2)
RHI_VULKAN_DECL(vkCmdClearDepthStencilImage)
RHI_VULKAN_DECL(vkMapMemory)
RHI_VULKAN_DECL(vkCmdCopyImageToBuffer)
RHI_VULKAN_DECL(vkCmdBindIndexBuffer)
RHI_VULKAN_DECL(vkQueueWaitIdle)
RHI_VULKAN_DECL(vkGetPhysicalDeviceMemoryProperties)
RHI_VULKAN_DECL(vkCmdBindVertexBuffers)
RHI_VULKAN_DECL(vkGetDeviceQueue)
RHI_VULKAN_DECL(vkDestroyImage)
RHI_VULKAN_DECL(vkCmdDrawIndexed)
RHI_VULKAN_DECL(vkCmdSetDepthTestEnable)
RHI_VULKAN_DECL(vkCreateShaderModule)
RHI_VULKAN_DECL(vkDestroyShaderModule)
RHI_VULKAN_DECL(vkDestroyDescriptorSetLayout)
RHI_VULKAN_DECL(vkDestroyFence)
RHI_VULKAN_DECL(vkDestroySurfaceKHR)
RHI_VULKAN_DECL(vkCreateBuffer)
RHI_VULKAN_DECL(vkGetPhysicalDeviceFormatProperties)
RHI_VULKAN_DECL(vkCreateSampler)
RHI_VULKAN_DECL(vkGetPhysicalDeviceSurfaceCapabilitiesKHR)
RHI_VULKAN_DECL(vkUpdateDescriptorSets)
RHI_VULKAN_DECL(vkAcquireNextImageKHR)
RHI_VULKAN_DECL(vkDestroyInstance)
RHI_VULKAN_DECL(vkGetPhysicalDeviceSurfaceFormatsKHR)
RHI_VULKAN_DECL(vkCreateDescriptorSetLayout)
RHI_VULKAN_DECL(vkDestroyDevice)
RHI_VULKAN_DECL(vkCmdBindPipeline)
RHI_VULKAN_DECL(vkCmdSetFrontFace)
RHI_VULKAN_DECL(vkCmdSetPrimitiveTopology)
RHI_VULKAN_DECL(vkCreateImageView)
RHI_VULKAN_DECL(vkCmdSetStencilOp)
RHI_VULKAN_DECL(vkFreeMemory)
RHI_VULKAN_DECL(vkGetPhysicalDeviceFeatures)
RHI_VULKAN_DECL(vkDestroySwapchainKHR)
RHI_VULKAN_DECL(vkDestroyCommandPool)
RHI_VULKAN_DECL(vkFreeDescriptorSets)
RHI_VULKAN_DECL(vkAllocateDescriptorSets)
RHI_VULKAN_DECL(vkGetInstanceProcAddr)
RHI_VULKAN_DECL(vkWaitForFences)
RHI_VULKAN_DECL(vkEndCommandBuffer)
RHI_VULKAN_DECL(vkCreateDevice)
RHI_VULKAN_DECL(vkGetPhysicalDeviceQueueFamilyProperties)
RHI_VULKAN_DECL(vkDestroyPipelineLayout)
RHI_VULKAN_DECL(vkCreateGraphicsPipelines)
RHI_VULKAN_DECL(vkBindImageMemory)
RHI_VULKAN_DECL(vkBindBufferMemory)
RHI_VULKAN_DECL(vkCmdDraw)
RHI_VULKAN_DECL(vkCreateCommandPool)
dynamic_library vulkan_lib
Definition: vulkan_platform.h:28
RHI_VULKAN_DECL(vkEnumerateInstanceLayerProperties)
RHI_VULKAN_DECL(vkDestroySampler)
RHI_VULKAN_DECL(vkDestroyPipeline)
RHI_VULKAN_DECL(vkCreatePipelineLayout)
VkDevice device
Definition: vulkan_platform.h:31
RHI_VULKAN_DECL(vkCmdSetCullMode)
RHI_VULKAN_DECL(vkGetBufferMemoryRequirements)
RHI_VULKAN_DECL(vkGetSwapchainImagesKHR)
RHI_VULKAN_DECL(vkGetDeviceProcAddr)
RHI_VULKAN_DECL(vkCmdBlitImage)
RHI_VULKAN_DECL(vkCmdPushConstants)
RHI_VULKAN_DECL(vkAllocateMemory)
RHI_VULKAN_DECL(vkCmdSetStencilReference)
RHI_VULKAN_DECL(vkUnmapMemory)
RHI_VULKAN_DECL(vkQueueSubmit)
RHI_VULKAN_DECL(vkCmdSetStencilTestEnable)
RHI_VULKAN_DECL(vkEnumeratePhysicalDevices)
RHI_VULKAN_DECL(vkEnumerateInstanceExtensionProperties)
RHI_VULKAN_DECL(vkCreateSwapchainKHR)
RHI_VULKAN_DECL(vkCmdCopyBufferToImage)
RHI_VULKAN_DECL(vkDestroyBuffer)
RHI_VULKAN_DECL(vkDestroyImageView)
RHI_VULKAN_DECL(vkDeviceWaitIdle)
RHI_VULKAN_DECL(vkDestroySemaphore)
RHI_VULKAN_DECL(vkFlushMappedMemoryRanges)
RHI_VULKAN_DECL(vkQueuePresentKHR)
VkInstance instance
Definition: vulkan_platform.h:30
RHI_VULKAN_DECL(vkCreateFence)
RHI_VULKAN_DECL(vkGetImageMemoryRequirements)
RHI_VULKAN_DECL(vkEnumerateInstanceVersion)
RHI_VULKAN_DECL(vkCmdEndRendering)
RHI_VULKAN_DECL(vkCmdSetStencilCompareMask)
RHI_VULKAN_DECL(vkResetFences)
RHI_VULKAN_DECL(vkCmdSetViewport)
RHI_VULKAN_DECL(vkCmdClearColorImage)
RHI_VULKAN_DECL(vkEnumerateDeviceExtensionProperties)
RHI_VULKAN_DECL(vkCmdBindDescriptorSets)
RHI_VULKAN_DECL(vkCreateDescriptorPool)
RHI_VULKAN_DECL(vkCreateInstance)
RHI_VULKAN_DECL(vkBeginCommandBuffer)
RHI_VULKAN_DECL(vkGetPhysicalDeviceFeatures2)
RHI_VULKAN_DECL(vkCreateImage)
RHI_VULKAN_DECL(vkCmdExecuteCommands)
RHI_VULKAN_DECL(vkCmdCopyBuffer)
RHI_VULKAN_DECL(vkCmdSetScissor)
RHI_VULKAN_DECL(vkCreateSemaphore)
RHI_VULKAN_DECL(vkGetPhysicalDeviceSurfacePresentModesKHR)
RHI_VULKAN_DECL(vkAllocateCommandBuffers)
RHI_VULKAN_DECL(vkCmdSetStencilWriteMask)
RHI_VULKAN_DECL(vkCmdBeginRendering)
RHI_VULKAN_DECL(vkGetPhysicalDeviceProperties)
RHI_VULKAN_DECL(vkDestroyDescriptorPool)
RHI_VULKAN_DECL(vkCmdSetDepthWriteEnable)
RHI_VULKAN_DECL(vkFreeCommandBuffers)
Represents a window in the application.
Definition: platform.h:69
The overall Vulkan context for the backend. Holds and maintains global renderer backend state,...
Definition: vulkan_types.h:681
void vulkan_platform_get_required_extension_names(const char ***names_darray)
Appends the names of required extensions for this platform to the names_darray, which should be creat...
b8 vulkan_platform_create_vulkan_surface(struct vulkan_context *context, struct kwindow *window)
Creates and assigns a surface to the given context.
b8 vulkan_platform_presentation_support(struct vulkan_context *context, struct VkPhysicalDevice_T *physical_device, u32 queue_family_index)
struct krhi_vulkan krhi_vulkan
b8 vulkan_platform_initialize(krhi_vulkan *rhi)