Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void StardustOpenXRFrame::createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory, int &fd, VkMemoryRequirements& memRequirements) {
- VkExternalMemoryBufferCreateInfo externalBufferInfo = {
- VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
- nullptr,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
- };
- VkBufferCreateInfo bufferInfo = {};
- bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
- // bufferInfo.pNext = &externalBufferInfo;
- bufferInfo.pNext = nullptr;
- bufferInfo.size = size;
- bufferInfo.usage = usage;
- bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
- bufferInfo.queueFamilyIndexCount = 1;
- bufferInfo.pQueueFamilyIndices = &graphics->openxr->vulkan->queueFamilyIndex;
- if (vkCreateBuffer(graphics->openxr->vulkan->device, &bufferInfo, nullptr, &buffer) != VK_SUCCESS) {
- throw std::runtime_error("failed to create buffer!");
- }
- vkGetBufferMemoryRequirements(graphics->openxr->vulkan->device, buffer, &memRequirements);
- const int align_mod = memRequirements.size % memRequirements.alignment;
- const int aligned_size = ((memRequirements.size % memRequirements.alignment) == 0)
- ? memRequirements.size
- : (memRequirements.size + memRequirements.alignment - align_mod);
- VkImportMemoryFdInfoKHR import_memory_info = {
- VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR,
- nullptr,
- VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,
- fd
- };
- VkMemoryAllocateInfo allocInfo = {};
- allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
- // allocInfo.pNext = &import_memory_info;
- allocInfo.pNext = nullptr;
- allocInfo.allocationSize = aligned_size;
- allocInfo.memoryTypeIndex = findMemoryType(memRequirements.memoryTypeBits, properties);
- if (vkAllocateMemory(graphics->openxr->vulkan->device, &allocInfo, nullptr, &bufferMemory) != VK_SUCCESS) {
- throw std::runtime_error("failed to allocate buffer memory!");
- }
- VkResult result = vkBindBufferMemory(graphics->openxr->vulkan->device, buffer, bufferMemory, 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement