Skip to content

Commit

Permalink
Added Buffer creation method with alignment.
Browse files Browse the repository at this point in the history
  • Loading branch information
diharaw committed Feb 1, 2022
1 parent c9bffcb commit 20b1cff
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 15 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ set(STB_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/external/stb")
set(IMGUI_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/external/imgui")
set(ASSIMP_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/external/assimp/include" "${CMAKE_CURRENT_BINARY_DIR}/external/assimp/include")
set(JSON_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/external/json/single_include/nlohmann")
set(VMA_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/external/VulkanMemoryAllocator/src")
set(VMA_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/external/VulkanMemoryAllocator/include")

if (USE_VULKAN)
find_package(Vulkan)
Expand Down
3 changes: 2 additions & 1 deletion include/vk.h
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ class Buffer : public Object
using Ptr = std::shared_ptr<Buffer>;

static Buffer::Ptr create(Backend::Ptr backend, VkBufferUsageFlags usage, size_t size, VmaMemoryUsage memory_usage, VkFlags create_flags, void* data = nullptr);
static Buffer::Ptr create_with_alignment(Backend::Ptr backend, VkBufferUsageFlags usage, size_t size, size_t alignment, VmaMemoryUsage memory_usage, VkFlags create_flags, void* data = nullptr);

~Buffer();

Expand All @@ -349,7 +350,7 @@ class Buffer : public Object
inline VkDeviceAddress device_address() { return m_device_address; }

private:
Buffer(Backend::Ptr backend, VkBufferUsageFlags usage, size_t size, VmaMemoryUsage memory_usage, VkFlags create_flags, void* data);
Buffer(Backend::Ptr backend, VkBufferUsageFlags usage, size_t size, size_t alignment, VmaMemoryUsage memory_usage, VkFlags create_flags, void* data);

private:
size_t m_size;
Expand Down
44 changes: 31 additions & 13 deletions src/vk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -696,12 +696,19 @@ void Framebuffer::set_name(const std::string& name)

Buffer::Ptr Buffer::create(Backend::Ptr backend, VkBufferUsageFlags usage, size_t size, VmaMemoryUsage memory_usage, VkFlags create_flags, void* data)
{
return std::shared_ptr<Buffer>(new Buffer(backend, usage, size, memory_usage, create_flags, data));
return std::shared_ptr<Buffer>(new Buffer(backend, usage, size, 0, memory_usage, create_flags, data));
}

// -----------------------------------------------------------------------------------------------------------------------------------

Buffer::Buffer(Backend::Ptr backend, VkBufferUsageFlags usage, size_t size, VmaMemoryUsage memory_usage, VkFlags create_flags, void* data) :
Buffer::Ptr Buffer::create_with_alignment(Backend::Ptr backend, VkBufferUsageFlags usage, size_t size, size_t alignment, VmaMemoryUsage memory_usage, VkFlags create_flags, void* data)
{
return std::shared_ptr<Buffer>(new Buffer(backend, usage, size, alignment, memory_usage, create_flags, data));
}

// -----------------------------------------------------------------------------------------------------------------------------------

Buffer::Buffer(Backend::Ptr backend, VkBufferUsageFlags usage, size_t size, size_t alignment, VmaMemoryUsage memory_usage, VkFlags create_flags, void* data) :
Object(backend), m_size(size), m_vma_memory_usage(memory_usage)
{
m_vma_allocator = backend->allocator();
Expand Down Expand Up @@ -755,10 +762,21 @@ Buffer::Buffer(Backend::Ptr backend, VkBufferUsageFlags usage, size_t size, VmaM
alloc_create_info.memoryTypeBits = 0;
alloc_create_info.pool = VK_NULL_HANDLE;

if (vmaCreateBuffer(m_vma_allocator, &buffer_info, &alloc_create_info, &m_vk_buffer, &m_vma_allocation, &vma_alloc_info) != VK_SUCCESS)
if (alignment == 0)
{
if (vmaCreateBuffer(m_vma_allocator, &buffer_info, &alloc_create_info, &m_vk_buffer, &m_vma_allocation, &vma_alloc_info) != VK_SUCCESS)
{
DW_LOG_FATAL("(Vulkan) Failed to create Buffer.");
throw std::runtime_error("(Vulkan) Failed to create Buffer.");
}
}
else
{
DW_LOG_FATAL("(Vulkan) Failed to create Buffer.");
throw std::runtime_error("(Vulkan) Failed to create Buffer.");
if (vmaCreateBufferWithAlignment(m_vma_allocator, &buffer_info, &alloc_create_info, alignment, &m_vk_buffer, &m_vma_allocation, &vma_alloc_info) != VK_SUCCESS)
{
DW_LOG_FATAL("(Vulkan) Failed to create Buffer.");
throw std::runtime_error("(Vulkan) Failed to create Buffer.");
}
}

m_vk_device_memory = vma_alloc_info.deviceMemory;
Expand Down Expand Up @@ -2397,7 +2415,7 @@ RayTracingPipeline::RayTracingPipeline(Backend::Ptr backend, Desc desc) :
uint32_t group_size_aligned = utilities::aligned_size(rt_pipeline_props.shaderGroupHandleSize, rt_pipeline_props.shaderGroupBaseAlignment);
size_t sbt_size = m_sbt->groups().size() * group_size_aligned;

m_vk_buffer = vk::Buffer::create(backend, VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, sbt_size, VMA_MEMORY_USAGE_CPU_TO_GPU, VMA_ALLOCATION_CREATE_MAPPED_BIT);
m_vk_buffer = vk::Buffer::create_with_alignment(backend, VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, sbt_size, rt_pipeline_props.shaderGroupBaseAlignment, VMA_MEMORY_USAGE_CPU_TO_GPU, VMA_ALLOCATION_CREATE_MAPPED_BIT);

std::vector<uint8_t> scratch_mem(sbt_size);

Expand All @@ -2415,7 +2433,7 @@ RayTracingPipeline::RayTracingPipeline(Backend::Ptr backend, Desc desc) :
memcpy(dst_ptr, src_ptr, group_handle_size);

dst_ptr += group_size_aligned;
src_ptr += group_handle_size;
src_ptr += group_size_aligned;
}
}

Expand Down Expand Up @@ -3551,13 +3569,13 @@ void Backend::initialize()
DescriptorPool::Desc dp_desc;

dp_desc.set_max_sets(512)
.add_pool_size(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 32)
.add_pool_size(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 4)
.add_pool_size(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 256)
.add_pool_size(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 32)
.add_pool_size(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 32)
.add_pool_size(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1024)
.add_pool_size(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 16)
.add_pool_size(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 4096)
.add_pool_size(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1024)
.add_pool_size(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1024)
.add_pool_size(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, 16)
.add_pool_size(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 16);
.add_pool_size(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 32);

for (int i = 0; i < MAX_DESCRIPTOR_POOL_THREADS; i++)
g_descriptor_pools[i] = DescriptorPool::create(shared_from_this(), dp_desc);
Expand Down

0 comments on commit 20b1cff

Please sign in to comment.