blob: fad92a7c5b861ffa424e93dfedad68832641b681 [file] [log] [blame]
Jesse Hall04f4f472015-08-16 19:51:04 -07001#ifndef LIBVULKAN_LOADER_H
2#define LIBVULKAN_LOADER_H 1
3
4#define VK_PROTOTYPES
5#include <vulkan/vulkan.h>
6
7namespace vulkan {
8
9struct InstanceVtbl {
10 // clang-format off
11 VkInstance instance;
12
13 PFN_vkCreateInstance CreateInstance;
14 PFN_vkDestroyInstance DestroyInstance;
15 PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
16 PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
17
18 PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
19 PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
20 PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
21 PFN_vkGetPhysicalDeviceLimits GetPhysicalDeviceLimits;
22 PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
23 PFN_vkGetPhysicalDeviceQueueCount GetPhysicalDeviceQueueCount;
24 PFN_vkGetPhysicalDeviceQueueProperties GetPhysicalDeviceQueueProperties;
25 PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
26 PFN_vkCreateDevice CreateDevice;
27 PFN_vkGetPhysicalDeviceExtensionProperties GetPhysicalDeviceExtensionProperties;
28 PFN_vkGetPhysicalDeviceLayerProperties GetPhysicalDeviceLayerProperties;
29 PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
30 // clang-format on
31};
32
33struct DeviceVtbl {
34 void* device;
35
36 PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
37 PFN_vkDestroyDevice DestroyDevice;
38 PFN_vkGetDeviceQueue GetDeviceQueue;
39 PFN_vkDeviceWaitIdle DeviceWaitIdle;
40 PFN_vkAllocMemory AllocMemory;
41 PFN_vkFreeMemory FreeMemory;
42 PFN_vkMapMemory MapMemory;
43 PFN_vkUnmapMemory UnmapMemory;
44 PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
45 PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
46 PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment;
47 PFN_vkBindBufferMemory BindBufferMemory;
48 PFN_vkBindImageMemory BindImageMemory;
49 PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements;
50 PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements;
51 PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
52 PFN_vkCreateFence CreateFence;
53 PFN_vkDestroyFence DestroyFence;
54 PFN_vkResetFences ResetFences;
55 PFN_vkGetFenceStatus GetFenceStatus;
56 PFN_vkWaitForFences WaitForFences;
57 PFN_vkCreateSemaphore CreateSemaphore;
58 PFN_vkDestroySemaphore DestroySemaphore;
59 PFN_vkCreateEvent CreateEvent;
60 PFN_vkDestroyEvent DestroyEvent;
61 PFN_vkGetEventStatus GetEventStatus;
62 PFN_vkSetEvent SetEvent;
63 PFN_vkResetEvent ResetEvent;
64 PFN_vkCreateQueryPool CreateQueryPool;
65 PFN_vkDestroyQueryPool DestroyQueryPool;
66 PFN_vkGetQueryPoolResults GetQueryPoolResults;
67 PFN_vkCreateBuffer CreateBuffer;
68 PFN_vkDestroyBuffer DestroyBuffer;
69 PFN_vkCreateBufferView CreateBufferView;
70 PFN_vkDestroyBufferView DestroyBufferView;
71 PFN_vkCreateImage CreateImage;
72 PFN_vkDestroyImage DestroyImage;
73 PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
74 PFN_vkCreateImageView CreateImageView;
75 PFN_vkDestroyImageView DestroyImageView;
76 PFN_vkCreateAttachmentView CreateAttachmentView;
77 PFN_vkDestroyAttachmentView DestroyAttachmentView;
78 PFN_vkCreateShaderModule CreateShaderModule;
79 PFN_vkDestroyShaderModule DestroyShaderModule;
80 PFN_vkCreateShader CreateShader;
81 PFN_vkDestroyShader DestroyShader;
82 PFN_vkCreatePipelineCache CreatePipelineCache;
83 PFN_vkDestroyPipelineCache DestroyPipelineCache;
84 PFN_vkGetPipelineCacheSize GetPipelineCacheSize;
85 PFN_vkGetPipelineCacheData GetPipelineCacheData;
86 PFN_vkMergePipelineCaches MergePipelineCaches;
87 PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
88 PFN_vkCreateComputePipelines CreateComputePipelines;
89 PFN_vkDestroyPipeline DestroyPipeline;
90 PFN_vkCreatePipelineLayout CreatePipelineLayout;
91 PFN_vkDestroyPipelineLayout DestroyPipelineLayout;
92 PFN_vkCreateSampler CreateSampler;
93 PFN_vkDestroySampler DestroySampler;
94 PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
95 PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout;
96 PFN_vkCreateDescriptorPool CreateDescriptorPool;
97 PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
98 PFN_vkResetDescriptorPool ResetDescriptorPool;
99 PFN_vkAllocDescriptorSets AllocDescriptorSets;
100 PFN_vkFreeDescriptorSets FreeDescriptorSets;
101 PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
102 PFN_vkCreateDynamicViewportState CreateDynamicViewportState;
103 PFN_vkDestroyDynamicViewportState DestroyDynamicViewportState;
104 PFN_vkCreateDynamicRasterState CreateDynamicRasterState;
105 PFN_vkDestroyDynamicRasterState DestroyDynamicRasterState;
106 PFN_vkCreateDynamicColorBlendState CreateDynamicColorBlendState;
107 PFN_vkDestroyDynamicColorBlendState DestroyDynamicColorBlendState;
108 PFN_vkCreateDynamicDepthStencilState CreateDynamicDepthStencilState;
109 PFN_vkDestroyDynamicDepthStencilState DestroyDynamicDepthStencilState;
110 PFN_vkCreateFramebuffer CreateFramebuffer;
111 PFN_vkDestroyFramebuffer DestroyFramebuffer;
112 PFN_vkCreateRenderPass CreateRenderPass;
113 PFN_vkDestroyRenderPass DestroyRenderPass;
114 PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
115 PFN_vkCreateCommandPool CreateCommandPool;
116 PFN_vkDestroyCommandPool DestroyCommandPool;
117 PFN_vkResetCommandPool ResetCommandPool;
118 PFN_vkCreateCommandBuffer CreateCommandBuffer;
119 PFN_vkDestroyCommandBuffer DestroyCommandBuffer;
120
121 PFN_vkQueueSubmit QueueSubmit;
122 PFN_vkQueueWaitIdle QueueWaitIdle;
123 PFN_vkQueueBindSparseBufferMemory QueueBindSparseBufferMemory;
124 PFN_vkQueueBindSparseImageOpaqueMemory QueueBindSparseImageOpaqueMemory;
125 PFN_vkQueueBindSparseImageMemory QueueBindSparseImageMemory;
126 PFN_vkQueueSignalSemaphore QueueSignalSemaphore;
127 PFN_vkQueueWaitSemaphore QueueWaitSemaphore;
128
129 PFN_vkBeginCommandBuffer BeginCommandBuffer;
130 PFN_vkEndCommandBuffer EndCommandBuffer;
131 PFN_vkResetCommandBuffer ResetCommandBuffer;
132 PFN_vkCmdBindPipeline CmdBindPipeline;
133 PFN_vkCmdBindDynamicViewportState CmdBindDynamicViewportState;
134 PFN_vkCmdBindDynamicRasterState CmdBindDynamicRasterState;
135 PFN_vkCmdBindDynamicColorBlendState CmdBindDynamicColorBlendState;
136 PFN_vkCmdBindDynamicDepthStencilState CmdBindDynamicDepthStencilState;
137 PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
138 PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
139 PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
140 PFN_vkCmdDraw CmdDraw;
141 PFN_vkCmdDrawIndexed CmdDrawIndexed;
142 PFN_vkCmdDrawIndirect CmdDrawIndirect;
143 PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
144 PFN_vkCmdDispatch CmdDispatch;
145 PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
146 PFN_vkCmdCopyBuffer CmdCopyBuffer;
147 PFN_vkCmdCopyImage CmdCopyImage;
148 PFN_vkCmdBlitImage CmdBlitImage;
149 PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
150 PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
151 PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
152 PFN_vkCmdFillBuffer CmdFillBuffer;
153 PFN_vkCmdClearColorImage CmdClearColorImage;
154 PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
155 PFN_vkCmdClearColorAttachment CmdClearColorAttachment;
156 PFN_vkCmdClearDepthStencilAttachment CmdClearDepthStencilAttachment;
157 PFN_vkCmdResolveImage CmdResolveImage;
158 PFN_vkCmdSetEvent CmdSetEvent;
159 PFN_vkCmdResetEvent CmdResetEvent;
160 PFN_vkCmdWaitEvents CmdWaitEvents;
161 PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
162 PFN_vkCmdBeginQuery CmdBeginQuery;
163 PFN_vkCmdEndQuery CmdEndQuery;
164 PFN_vkCmdResetQueryPool CmdResetQueryPool;
165 PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
166 PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
167 PFN_vkCmdPushConstants CmdPushConstants;
168 PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
169 PFN_vkCmdNextSubpass CmdNextSubpass;
170 PFN_vkCmdEndRenderPass CmdEndRenderPass;
171 PFN_vkCmdExecuteCommands CmdExecuteCommands;
172};
173
174// -----------------------------------------------------------------------------
175// loader.cpp
176
177VkResult GetGlobalExtensionProperties(const char* layer_name,
178 uint32_t* count,
179 VkExtensionProperties* properties);
180VkResult GetGlobalLayerProperties(uint32_t* count,
181 VkLayerProperties* properties);
182VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
183 VkInstance* instance);
184PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* name);
185PFN_vkVoidFunction GetDeviceProcAddr(VkDevice drv_device, const char* name);
186VkResult GetDeviceQueue(VkDevice drv_device,
187 uint32_t family,
188 uint32_t index,
189 VkQueue* out_queue);
Jesse Hallc7a6eb52015-08-31 12:52:03 -0700190VkResult CreateCommandBuffer(VkDevice device,
191 const VkCmdBufferCreateInfo* create_info,
192 VkCmdBuffer* out_cmdbuf);
Jesse Hall04f4f472015-08-16 19:51:04 -0700193VkResult DestroyDevice(VkDevice drv_device);
194
195// -----------------------------------------------------------------------------
196// get_proc_addr.cpp
197
198PFN_vkVoidFunction GetGlobalInstanceProcAddr(const char* name);
199PFN_vkVoidFunction GetGlobalDeviceProcAddr(const char* name);
200PFN_vkVoidFunction GetSpecificInstanceProcAddr(const InstanceVtbl* vtbl,
201 const char* name);
202PFN_vkVoidFunction GetSpecificDeviceProcAddr(const DeviceVtbl* vtbl,
203 const char* name);
204
205bool LoadInstanceVtbl(VkInstance instance,
206 PFN_vkGetInstanceProcAddr get_proc_addr,
207 InstanceVtbl& vtbl);
208bool LoadDeviceVtbl(VkDevice device,
209 PFN_vkGetDeviceProcAddr get_proc_addr,
210 DeviceVtbl& vtbl);
211
212} // namespace vulkan
213
214#endif // LIBVULKAN_LOADER_H