1#include <vulkan/vulkan_core.h>
10static VkInstanceCreateInfo vulkancreat;
11static VkInstance vulkan;
13static VkPhysicalDevice vkphydev;
14static uint32_t vkphydevcount = 0;
15static VkPhysicalDeviceMemoryProperties vkphydevmemprops;
18static VkDeviceCreateInfo vkdevcreat;
19static VkQueue vkqueue;
21static uint32_t find_queue_family(VkPhysicalDevice phydev) {
22 uint32_t queueFamilyCount = 0;
23 vkGetPhysicalDeviceQueueFamilyProperties(
29 union upVkQueueFamilyProperties {
31 VkQueueFamilyProperties* p;
34 queueFamilies.v = malloc(queueFamilyCount *
sizeof(VkQueueFamilyProperties));
36 vkGetPhysicalDeviceQueueFamilyProperties(
42 uint32_t queueFamilyIndex = UINT32_MAX;
43 for (uint32_t i = 0; i < queueFamilyCount; i++) {
44 if (queueFamilies.p[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) {
49 free(queueFamilies.v);
50 return queueFamilyIndex;
53static void Test_VkInit() {
58 memset(&vkphydevmemprops, 0,
sizeof(vkphydevmemprops));
59 memset(&vkdevcreat, 0,
sizeof(vkdevcreat));
60 memset(&vulkancreat, 0,
sizeof(vulkancreat));
63 vulkancreat.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
64 vulkancreat.enabledExtensionCount = 0;
65 vulkancreat.enabledLayerCount = 0;
66 vulkancreat.ppEnabledExtensionNames = 0;
67 vulkancreat.ppEnabledLayerNames = 0;
68 vulkancreat.flags = 0;
69 vulkancreat.pApplicationInfo = NULL;
71 vkres = vkCreateInstance(&vulkancreat, 0, &vulkan);
72 printf(
"vkCreateInstance result: %d\n",
vkres);
73 assert(
vkres == VK_SUCCESS &&
"vkCreateInstance has failed");
77 vkres = vkEnumeratePhysicalDevices(
83 assert(
vkres == VK_SUCCESS);
84 assert(vkphydevcount &&
"vkphydevcount must be greater than 0.");
85 printf(
"Number of Physical Device available: %u\n", vkphydevcount);
89 vkres = vkEnumeratePhysicalDevices(
95 assert(
vkres == VK_SUCCESS &&
"vkEnumeratePhysicalDevices has failed.");
96 assert(vkphydevcount != 0 &&
"vkphydevcount has changed, which is not expected.");
97 assert(vkphydev &&
"vkphydev is no initialised");
101 vkdevcreat.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
104 uint32_t queueFamilyIndex = find_queue_family(vkphydev);
105 assert(queueFamilyIndex != UINT32_MAX &&
"No suitable queue family found");
108 float queuePriority = 1.0f;
109 VkDeviceQueueCreateInfo queueCreateInfo;
110 memset(&queueCreateInfo, 0,
sizeof(queueCreateInfo));
112 queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
113 queueCreateInfo.queueFamilyIndex = queueFamilyIndex;
114 queueCreateInfo.queueCount = 1;
115 queueCreateInfo.pQueuePriorities = &queuePriority;
118 vkdevcreat.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
119 vkdevcreat.queueCreateInfoCount = 1;
120 vkdevcreat.pQueueCreateInfos = &queueCreateInfo;
121 vkdevcreat.enabledExtensionCount = 0;
122 vkdevcreat.ppEnabledExtensionNames = NULL;
123 vkdevcreat.enabledLayerCount = 0;
124 vkdevcreat.ppEnabledLayerNames = NULL;
125 vkdevcreat.flags = 0;
127 vkres = vkCreateDevice(
141 assert(
vkres == VK_SUCCESS &&
"vkCreateDevice has failed.");
142 assert(vkdev &&
"vkdev is not initialised");
144 vkGetPhysicalDeviceMemoryProperties(
149 puts(
"Test_VkInit has done.");
152static void Test_VkEnd() {
153 if(vkdev) vkDestroyDevice(vkdev, 0);
154 if(vulkan) vkDestroyInstance(vulkan, 0);
void ae2f_AnnAct_t(ae2f_float_t *ret, ae2f_float_t x)
Customisable activasion function type.
#define ae2f_float
Predefined floating point type.
#define __ae2fVK_AnnMlpClean_imp(v_mlp)
#define __ae2fVK_AnnMlpMk_imp(v_mk, iv_weight_opt, iv_bias_opt, iv_outstream_opt, iv_deltastream_opt, i_len_count, i_len, i_len_swap, i_prm_offset, i_extra, i_act, i_actderiv, i_lossderiv, i_learningrate, i_learningrate_bias, i_vkdev, i_vkmemprops, iv_vkalloccalls, i_vkcldeclaration, i_vkcldefinition)
Make MLP with OpenCL compute shader.