The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

aux/vk: Add buffer helper structs and functions.

authored by

Lubosz Sarnecki and committed by
Jakob Bornecrantz
589c7e4f 90504031

+67
+50
src/xrt/auxiliary/vk/vk_helpers.c
··· 1120 1120 1121 1121 return true; 1122 1122 } 1123 + 1124 + bool 1125 + vk_buffer_init(struct vk_bundle *vk, 1126 + VkDeviceSize size, 1127 + VkBufferUsageFlags usage, 1128 + VkMemoryPropertyFlags properties, 1129 + VkBuffer *out_buffer, 1130 + VkDeviceMemory *out_mem) 1131 + { 1132 + VkBufferCreateInfo buffer_info = { 1133 + .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, 1134 + .size = size, 1135 + .usage = usage, 1136 + }; 1137 + 1138 + VkResult res = 1139 + vk->vkCreateBuffer(vk->device, &buffer_info, NULL, out_buffer); 1140 + vk_check_error("vkCreateBuffer", res, false); 1141 + 1142 + VkMemoryRequirements requirements; 1143 + vk->vkGetBufferMemoryRequirements(vk->device, *out_buffer, 1144 + &requirements); 1145 + 1146 + VkMemoryAllocateInfo alloc_info = { 1147 + .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, 1148 + .allocationSize = requirements.size}; 1149 + 1150 + if (!vk_get_memory_type(vk, requirements.memoryTypeBits, properties, 1151 + &alloc_info.memoryTypeIndex)) { 1152 + fprintf(stderr, 1153 + "Failed to find matching memoryTypeIndex for buffer\n"); 1154 + return false; 1155 + } 1156 + 1157 + res = vk->vkAllocateMemory(vk->device, &alloc_info, NULL, out_mem); 1158 + vk_check_error("vkAllocateMemory", res, false); 1159 + 1160 + res = vk->vkBindBufferMemory(vk->device, *out_buffer, *out_mem, 0); 1161 + vk_check_error("vkBindBufferMemory", res, false); 1162 + 1163 + return true; 1164 + } 1165 + 1166 + void 1167 + vk_buffer_destroy(struct vk_buffer *self, struct vk_bundle *vk) 1168 + { 1169 + vk->vkDestroyBuffer(vk->device, self->handle, NULL); 1170 + vk->vkFreeMemory(vk->device, self->memory, NULL); 1171 + } 1172 +
+17
src/xrt/auxiliary/vk/vk_helpers.h
··· 180 180 // clang-format on 181 181 }; 182 182 183 + struct vk_buffer 184 + { 185 + VkBuffer handle; 186 + VkDeviceMemory memory; 187 + uint32_t size; 188 + void *data; 189 + }; 183 190 184 191 /* 185 192 * ··· 417 424 const VkDescriptorSetLayout *set_layout, 418 425 VkDescriptorSet *sets); 419 426 427 + bool 428 + vk_buffer_init(struct vk_bundle *vk, 429 + VkDeviceSize size, 430 + VkBufferUsageFlags usage, 431 + VkMemoryPropertyFlags properties, 432 + VkBuffer *out_buffer, 433 + VkDeviceMemory *out_mem); 434 + 435 + void 436 + vk_buffer_destroy(struct vk_buffer *self, struct vk_bundle *vk); 420 437 421 438 #ifdef __cplusplus 422 439 }