Overload for creating buffers with descriptor sets and passing memory type properties, use Vulkan result check macro

This commit is contained in:
saschawillems 2016-05-20 21:19:43 +02:00
parent 96df99f1f2
commit d365b7ccd5
2 changed files with 35 additions and 10 deletions

View file

@ -200,13 +200,13 @@ VkCommandBuffer VulkanExampleBase::createCommandBuffer(VkCommandBufferLevel leve
level, level,
1); 1);
vkTools::checkResult(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, &cmdBuffer)); VK_CHECK_RESULT(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, &cmdBuffer));
// If requested, also start the new command buffer // If requested, also start the new command buffer
if (begin) if (begin)
{ {
VkCommandBufferBeginInfo cmdBufInfo = vkTools::initializers::commandBufferBeginInfo(); VkCommandBufferBeginInfo cmdBufInfo = vkTools::initializers::commandBufferBeginInfo();
vkTools::checkResult(vkBeginCommandBuffer(cmdBuffer, &cmdBufInfo)); VK_CHECK_RESULT(vkBeginCommandBuffer(cmdBuffer, &cmdBufInfo));
} }
return cmdBuffer; return cmdBuffer;
@ -219,15 +219,15 @@ void VulkanExampleBase::flushCommandBuffer(VkCommandBuffer commandBuffer, VkQueu
return; return;
} }
vkTools::checkResult(vkEndCommandBuffer(commandBuffer)); VK_CHECK_RESULT(vkEndCommandBuffer(commandBuffer));
VkSubmitInfo submitInfo = {}; VkSubmitInfo submitInfo = {};
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submitInfo.commandBufferCount = 1; submitInfo.commandBufferCount = 1;
submitInfo.pCommandBuffers = &commandBuffer; submitInfo.pCommandBuffers = &commandBuffer;
vkTools::checkResult(vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE)); VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE));
vkTools::checkResult(vkQueueWaitIdle(queue)); VK_CHECK_RESULT(vkQueueWaitIdle(queue));
if (free) if (free)
{ {
@ -308,20 +308,20 @@ VkBool32 VulkanExampleBase::createBuffer(VkBufferUsageFlags usageFlags, VkMemory
VkMemoryAllocateInfo memAlloc = vkTools::initializers::memoryAllocateInfo(); VkMemoryAllocateInfo memAlloc = vkTools::initializers::memoryAllocateInfo();
VkBufferCreateInfo bufferCreateInfo = vkTools::initializers::bufferCreateInfo(usageFlags, size); VkBufferCreateInfo bufferCreateInfo = vkTools::initializers::bufferCreateInfo(usageFlags, size);
vkTools::checkResult(vkCreateBuffer(device, &bufferCreateInfo, nullptr, buffer)); VK_CHECK_RESULT(vkCreateBuffer(device, &bufferCreateInfo, nullptr, buffer));
vkGetBufferMemoryRequirements(device, *buffer, &memReqs); vkGetBufferMemoryRequirements(device, *buffer, &memReqs);
memAlloc.allocationSize = memReqs.size; memAlloc.allocationSize = memReqs.size;
getMemoryType(memReqs.memoryTypeBits, memoryPropertyFlags, &memAlloc.memoryTypeIndex); memAlloc.memoryTypeIndex = getMemoryType(memReqs.memoryTypeBits, memoryPropertyFlags);
vkTools::checkResult(vkAllocateMemory(device, &memAlloc, nullptr, memory)); VK_CHECK_RESULT(vkAllocateMemory(device, &memAlloc, nullptr, memory));
if (data != nullptr) if (data != nullptr)
{ {
void *mapped; void *mapped;
vkTools::checkResult(vkMapMemory(device, *memory, 0, size, 0, &mapped)); VK_CHECK_RESULT(vkMapMemory(device, *memory, 0, size, 0, &mapped));
memcpy(mapped, data, size); memcpy(mapped, data, size);
vkUnmapMemory(device, *memory); vkUnmapMemory(device, *memory);
} }
vkTools::checkResult(vkBindBufferMemory(device, *buffer, *memory, 0)); VK_CHECK_RESULT(vkBindBufferMemory(device, *buffer, *memory, 0));
return true; return true;
} }
@ -347,6 +347,22 @@ VkBool32 VulkanExampleBase::createBuffer(VkBufferUsageFlags usage, VkDeviceSize
} }
} }
VkBool32 VulkanExampleBase::createBuffer(VkBufferUsageFlags usage, VkMemoryPropertyFlags memoryPropertyFlags, VkDeviceSize size, void * data, VkBuffer * buffer, VkDeviceMemory * memory, VkDescriptorBufferInfo * descriptor)
{
VkBool32 res = createBuffer(usage, memoryPropertyFlags, size, data, buffer, memory);
if (res)
{
descriptor->offset = 0;
descriptor->buffer = *buffer;
descriptor->range = size;
return true;
}
else
{
return false;
}
}
void VulkanExampleBase::loadMesh( void VulkanExampleBase::loadMesh(
std::string filename, std::string filename,
vkMeshLoader::MeshBuffer * meshBuffer, vkMeshLoader::MeshBuffer * meshBuffer,

View file

@ -314,6 +314,15 @@ public:
VkBuffer *buffer, VkBuffer *buffer,
VkDeviceMemory *memory, VkDeviceMemory *memory,
VkDescriptorBufferInfo *descriptor); VkDescriptorBufferInfo *descriptor);
// Overload to pass memory property flags
VkBool32 createBuffer(
VkBufferUsageFlags usage,
VkMemoryPropertyFlags memoryPropertyFlags,
VkDeviceSize size,
void *data,
VkBuffer *buffer,
VkDeviceMemory *memory,
VkDescriptorBufferInfo *descriptor);
// Load a mesh (using ASSIMP) and create vulkan vertex and index buffers with given vertex layout // Load a mesh (using ASSIMP) and create vulkan vertex and index buffers with given vertex layout
void loadMesh( void loadMesh(