1#include <vulkan/vulkan_core.h>
8VkResult s_vkres = VK_SUCCESS;
10static VkApplicationInfo s_vkapp;
11static VkInstanceCreateInfo s_vkcreat;
12static VkInstance s_vulkan;
14static VkPhysicalDevice* sp_vkphydev;
15#define vkphydev (*sp_vkphydev)
17static uint32_t s_vkphydevcount = 0;
18static VkPhysicalDeviceMemoryProperties s_vkphydevmemprops;
20static VkDevice s_vkdev;
21static VkDeviceCreateInfo s_vkdevcreat;
22static VkQueue s_vkqueue;
24static uint32_t find_queue_family(VkPhysicalDevice phydev) {
25 uint32_t queueFamilyCount = 0;
29 VkQueueFamilyProperties* p;
31 uint32_t queueFamilyIndex = UINT32_MAX;
33 vkGetPhysicalDeviceQueueFamilyProperties(
40 queueFamilies.v = malloc((size_t)(queueFamilyCount *
sizeof(VkQueueFamilyProperties)));
42 vkGetPhysicalDeviceQueueFamilyProperties(
49 uint32_t i = queueFamilyCount;
51 if (queueFamilies.p[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) {
57 free(queueFamilies.v);
58 return queueFamilyIndex;
61static void Test_VkInit(
void) {
62 uint32_t queueFamilyIndex;
64 VkDeviceQueueCreateInfo queueCreateInfo;
67 VkExtensionProperties* m_vkextprops;
72 VkExtensionProperties* m_vkextprops_send;
76 memset(&s_vkphydevmemprops, 0,
sizeof(s_vkphydevmemprops));
77 memset(&s_vkdevcreat, 0,
sizeof(s_vkdevcreat));
78 memset(&s_vkcreat, 0,
sizeof(s_vkcreat));
80 vkEnumerateInstanceExtensionProperties(NULL, &s_vkcreat.enabledExtensionCount, NULL);
81 printf(
"enabledextcount: %u\n", s_vkcreat.enabledExtensionCount);
82 exts.m_v = malloc((size_t)(s_vkcreat.enabledExtensionCount * (
sizeof(VkExtensionProperties) +
sizeof(
void*))));
83 extnames.m_vkextprops_send = exts.m_vkextprops + s_vkcreat.enabledExtensionCount;
84 vkEnumerateInstanceExtensionProperties(NULL, &s_vkcreat.enabledExtensionCount, exts.m_vkextprops);
87 uint32_t i = s_vkcreat.enabledExtensionCount;
90 puts(exts.m_vkextprops[i].extensionName);
92 = exts.m_vkextprops[i].extensionName;
98 s_vkdev = VK_NULL_HANDLE;
103 s_vkapp.apiVersion = VK_MAKE_VERSION(1, 0, 0);
104 s_vkapp.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
105 s_vkapp.pApplicationName =
"ae2f_vktest";
106 s_vkapp.engineVersion = VK_MAKE_VERSION(1, 0, 0);
107 s_vkapp.pNext = NULL;
108 s_vkapp.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
109 s_vkapp.pEngineName =
"ae2f_vktest_engine";
110 s_vkcreat.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
111 s_vkcreat.enabledExtensionCount = 0;
112 s_vkcreat.ppEnabledExtensionNames = NULL;
113 s_vkcreat.ppEnabledLayerNames = 0;
115 s_vkcreat.pApplicationInfo = &s_vkapp;
117 s_vkres = vkCreateInstance(&s_vkcreat, 0, &s_vulkan);
118 printf(
"vkCreateInstance result: %d\n", s_vkres);
119 assert(vkres == VK_SUCCESS &&
"vkCreateInstance has failed");
122 s_vkres = vkEnumeratePhysicalDevices(
128 assert(vkres == VK_SUCCESS);
129 assert(vkphydevcount &&
"vkphydevcount must be greater than 0.");
131 printf(
"Number of Physical Device available: %u\n", s_vkphydevcount);
133 sp_vkphydev = malloc((size_t)(
sizeof(VkPhysicalDevice) * s_vkphydevcount));
136 s_vkres = vkEnumeratePhysicalDevices(
142 assert(vkres == VK_SUCCESS || vkres == VK_INCOMPLETE &&
"vkEnumeratePhysicalDevices has failed.");
143 assert(vkphydev &&
"vkphydev is no initialised");
145 s_vkdevcreat.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
148 queueFamilyIndex = find_queue_family(
vkphydev);
149 assert(queueFamilyIndex != UINT32_MAX &&
"No suitable queue family found");
152 queuePriority = 1.0f;
153 memset(&queueCreateInfo, 0,
sizeof(queueCreateInfo));
155 queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
156 queueCreateInfo.queueFamilyIndex = queueFamilyIndex;
157 queueCreateInfo.queueCount = 1;
158 queueCreateInfo.pQueuePriorities = &queuePriority;
161 s_vkdevcreat.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
162 s_vkdevcreat.queueCreateInfoCount = 1;
163 s_vkdevcreat.pQueueCreateInfos = &queueCreateInfo;
164 s_vkdevcreat.enabledExtensionCount = 0;
165 s_vkdevcreat.ppEnabledExtensionNames = NULL;
166 s_vkdevcreat.enabledLayerCount = 0;
167 s_vkdevcreat.ppEnabledLayerNames = NULL;
168 s_vkdevcreat.flags = 0;
170 s_vkres = vkCreateDevice(
184 assert(vkres == VK_SUCCESS &&
"vkCreateDevice has failed.");
185 assert(vkdev == VK_NULL_HANDLE &&
"vkdev is not initialised");
187 vkGetPhysicalDeviceMemoryProperties(
189 , &s_vkphydevmemprops
192 puts(
"Test_VkInit has done.");
196static void Test_VkEnd(
void) {
197 if(s_vkdev) vkDestroyDevice(s_vkdev, 0);
198 if(s_vulkan) vkDestroyInstance(s_vulkan, 0);