Overload for creating buffers with descriptor sets and passing memory type properties, use Vulkan result check macro
This commit is contained in:
parent
96df99f1f2
commit
d365b7ccd5
2 changed files with 35 additions and 10 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue