Skip to content

Commit

Permalink
Merge branch 'main' into feature/mobile_nerf_rayquery
Browse files Browse the repository at this point in the history
  • Loading branch information
RodrigoHolztrattner-QuIC committed Aug 30, 2024
2 parents 1fcb6b8 + 46a89dd commit b1f0fd0
Show file tree
Hide file tree
Showing 168 changed files with 1,412 additions and 1,662 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ tests/system_test/tmp
output/*
.mypy_cache
tags
.DS_Store

# vim backup and temp files
*~
.*.sw*
.sw*
.tracy

# macOS
.DS_Store
7 changes: 1 addition & 6 deletions app/ios/Storyboard.storyboard
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ limitations under the License.
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<viewLayoutGuide key="safeArea" id="vDu-zF-Fre"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<connections>
<outlet property="vulkan_view" destination="5EZ-qb-Rvc" id="XCX-oU-713"/>
Expand All @@ -45,9 +45,4 @@ limitations under the License.
<point key="canvasLocation" x="-218" y="4"/>
</scene>
</scenes>
<resources>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>
3 changes: 0 additions & 3 deletions framework/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,6 @@ set(CORE_FILES
core/query_pool.h
core/acceleration_structure.h
core/hpp_allocated.h
core/hpp_buffer.h
core/hpp_command_buffer.h
core/hpp_command_pool.h
core/hpp_debug.h
Expand Down Expand Up @@ -289,7 +288,6 @@ set(CORE_FILES
core/swapchain.cpp
core/command_buffer.cpp
core/allocated.cpp
core/buffer.cpp
core/image_core.cpp
core/image_view.cpp
core/sampled_image.cpp
Expand All @@ -299,7 +297,6 @@ set(CORE_FILES
core/render_pass.cpp
core/query_pool.cpp
core/acceleration_structure.cpp
core/hpp_buffer.cpp
core/hpp_command_buffer.cpp
core/hpp_command_pool.cpp
core/hpp_debug.cpp
Expand Down
8 changes: 4 additions & 4 deletions framework/api_vulkan_sample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -973,7 +973,7 @@ void ApiVulkanSample::handle_surface_changes()
}
}

VkDescriptorBufferInfo ApiVulkanSample::create_descriptor(vkb::core::Buffer &buffer, VkDeviceSize size, VkDeviceSize offset)
VkDescriptorBufferInfo ApiVulkanSample::create_descriptor(vkb::core::BufferC &buffer, VkDeviceSize size, VkDeviceSize offset)
{
VkDescriptorBufferInfo descriptor{};
descriptor.buffer = buffer.get_handle();
Expand Down Expand Up @@ -1025,7 +1025,7 @@ Texture ApiVulkanSample::load_texture(const std::string &file, vkb::sg::Image::C

VkCommandBuffer command_buffer = get_device().create_command_buffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);

vkb::core::Buffer stage_buffer = vkb::core::Buffer::create_staging_buffer(get_device(), texture.image->get_data());
vkb::core::BufferC stage_buffer = vkb::core::BufferC::create_staging_buffer(get_device(), texture.image->get_data());

// Setup buffer copy regions for each mip level
std::vector<VkBufferImageCopy> bufferCopyRegions;
Expand Down Expand Up @@ -1121,7 +1121,7 @@ Texture ApiVulkanSample::load_texture_array(const std::string &file, vkb::sg::Im

VkCommandBuffer command_buffer = get_device().create_command_buffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);

vkb::core::Buffer stage_buffer = vkb::core::Buffer::create_staging_buffer(get_device(), texture.image->get_data());
vkb::core::BufferC stage_buffer = vkb::core::BufferC::create_staging_buffer(get_device(), texture.image->get_data());

// Setup buffer copy regions for each mip level
std::vector<VkBufferImageCopy> buffer_copy_regions;
Expand Down Expand Up @@ -1220,7 +1220,7 @@ Texture ApiVulkanSample::load_texture_cubemap(const std::string &file, vkb::sg::

VkCommandBuffer command_buffer = get_device().create_command_buffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);

vkb::core::Buffer stage_buffer = vkb::core::Buffer::create_staging_buffer(get_device(), texture.image->get_data());
vkb::core::BufferC stage_buffer = vkb::core::BufferC::create_staging_buffer(get_device(), texture.image->get_data());

// Setup buffer copy regions for each mip level
std::vector<VkBufferImageCopy> buffer_copy_regions;
Expand Down
2 changes: 1 addition & 1 deletion framework/api_vulkan_sample.h
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ class ApiVulkanSample : public vkb::VulkanSampleC
* @param size The size of the descriptor (default: VK_WHOLE_SIZE)
* @param offset The offset of the descriptor (default: 0)
*/
VkDescriptorBufferInfo create_descriptor(vkb::core::Buffer &buffer, VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
VkDescriptorBufferInfo create_descriptor(vkb::core::BufferC &buffer, VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);

/**
* @brief Creates an image descriptor
Expand Down
31 changes: 14 additions & 17 deletions framework/buffer_pool.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

#include "core/buffer.h"
#include "core/device.h"
#include "core/hpp_buffer.h"
#include "core/hpp_device.h"

namespace vkb
Expand All @@ -35,27 +34,25 @@ class BufferAllocation
public:
using DeviceSizeType = typename std::conditional<bindingType == vkb::BindingType::Cpp, vk::DeviceSize, VkDeviceSize>::type;

using BufferType = typename std::conditional<bindingType == vkb::BindingType::Cpp, vkb::core::HPPBuffer, vkb::core::Buffer>::type;

public:
BufferAllocation() = default;
BufferAllocation(const BufferAllocation &) = delete;
BufferAllocation(BufferAllocation &&) = default;
BufferAllocation &operator=(const BufferAllocation &) = delete;
BufferAllocation &operator=(BufferAllocation &&) = default;

BufferAllocation(BufferType &buffer, DeviceSizeType size, DeviceSizeType offset);
BufferAllocation(vkb::core::Buffer<bindingType> &buffer, DeviceSizeType size, DeviceSizeType offset);

bool empty() const;
BufferType &get_buffer();
DeviceSizeType get_offset() const;
DeviceSizeType get_size() const;
void update(const std::vector<uint8_t> &data, uint32_t offset = 0);
bool empty() const;
vkb::core::Buffer<bindingType> &get_buffer();
DeviceSizeType get_offset() const;
DeviceSizeType get_size() const;
void update(const std::vector<uint8_t> &data, uint32_t offset = 0);
template <typename T>
void update(const T &value, uint32_t offset = 0);

private:
vkb::core::HPPBuffer *buffer = nullptr;
vkb::core::BufferCpp *buffer = nullptr;
vk::DeviceSize offset = 0;
vk::DeviceSize size = 0;
};
Expand All @@ -64,15 +61,15 @@ using BufferAllocationC = BufferAllocation<vkb::BindingType::C>;
using BufferAllocationCpp = BufferAllocation<vkb::BindingType::Cpp>;

template <>
inline BufferAllocation<vkb::BindingType::Cpp>::BufferAllocation(vkb::core::HPPBuffer &buffer, vk::DeviceSize size, vk::DeviceSize offset) :
inline BufferAllocation<vkb::BindingType::Cpp>::BufferAllocation(vkb::core::BufferCpp &buffer, vk::DeviceSize size, vk::DeviceSize offset) :
buffer(&buffer),
offset(offset),
size(size)
{}

template <>
inline BufferAllocation<vkb::BindingType::C>::BufferAllocation(vkb::core::Buffer &buffer, VkDeviceSize size, VkDeviceSize offset) :
buffer(reinterpret_cast<vkb::core::HPPBuffer *>(&buffer)),
inline BufferAllocation<vkb::BindingType::C>::BufferAllocation(vkb::core::BufferC &buffer, VkDeviceSize size, VkDeviceSize offset) :
buffer(reinterpret_cast<vkb::core::BufferCpp *>(&buffer)),
offset(static_cast<vk::DeviceSize>(offset)),
size(static_cast<vk::DeviceSize>(size))
{}
Expand All @@ -84,7 +81,7 @@ bool BufferAllocation<bindingType>::empty() const
}

template <vkb::BindingType bindingType>
typename BufferAllocation<bindingType>::BufferType &BufferAllocation<bindingType>::get_buffer()
typename vkb::core::Buffer<bindingType> &BufferAllocation<bindingType>::get_buffer()
{
assert(buffer && "Invalid buffer pointer");
if constexpr (bindingType == vkb::BindingType::Cpp)
Expand All @@ -93,7 +90,7 @@ typename BufferAllocation<bindingType>::BufferType &BufferAllocation<bindingType
}
else
{
return reinterpret_cast<vkb::core::Buffer &>(*buffer);
return reinterpret_cast<vkb::core::BufferC &>(*buffer);
}
}

Expand Down Expand Up @@ -190,7 +187,7 @@ class BufferBlock
vk::DeviceSize determine_alignment(vk::BufferUsageFlags usage, vk::PhysicalDeviceLimits const &limits) const;

private:
vkb::core::HPPBuffer buffer;
vkb::core::BufferCpp buffer;
vk::DeviceSize alignment = 0; // Memory alignment, it may change according to the usage
vk::DeviceSize offset = 0; // Current offset, it increases on every allocation
};
Expand Down Expand Up @@ -227,7 +224,7 @@ BufferAllocation<bindingType> BufferBlock<bindingType>::allocate(DeviceSizeType
}
else
{
return BufferAllocationC{reinterpret_cast<vkb::core::Buffer &>(buffer), static_cast<VkDeviceSize>(size), static_cast<VkDeviceSize>(aligned)};
return BufferAllocationC{reinterpret_cast<vkb::core::BufferC &>(buffer), static_cast<VkDeviceSize>(size), static_cast<VkDeviceSize>(aligned)};
}
}

Expand Down
12 changes: 6 additions & 6 deletions framework/common/utils.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 2018-2023, Arm Limited and Contributors
/* Copyright (c) 2018-2024, Arm Limited and Contributors
*
* SPDX-License-Identifier: Apache-2.0
*
Expand Down Expand Up @@ -56,11 +56,11 @@ void screenshot(RenderContext &render_context, const std::string &filename)
auto height = render_context.get_surface_extent().height;
auto dst_size = width * height * 4;

core::Buffer dst_buffer{render_context.get_device(),
dst_size,
VK_BUFFER_USAGE_TRANSFER_DST_BIT,
VMA_MEMORY_USAGE_GPU_TO_CPU,
VMA_ALLOCATION_CREATE_MAPPED_BIT};
vkb::core::BufferC dst_buffer{render_context.get_device(),
dst_size,
VK_BUFFER_USAGE_TRANSFER_DST_BIT,
VMA_MEMORY_USAGE_GPU_TO_CPU,
VMA_ALLOCATION_CREATE_MAPPED_BIT};

const auto &queue = render_context.get_device().get_queue_by_flags(VK_QUEUE_GRAPHICS_BIT, 0);

Expand Down
56 changes: 15 additions & 41 deletions framework/core/acceleration_structure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ AccelerationStructure::~AccelerationStructure()
}
}

uint64_t AccelerationStructure::add_triangle_geometry(std::unique_ptr<vkb::core::Buffer> &vertex_buffer,
std::unique_ptr<vkb::core::Buffer> &index_buffer,
std::unique_ptr<vkb::core::Buffer> &transform_buffer,
uint64_t AccelerationStructure::add_triangle_geometry(vkb::core::BufferC &vertex_buffer,
vkb::core::BufferC &index_buffer,
vkb::core::BufferC &transform_buffer,
uint32_t triangle_count, uint32_t max_vertex,
VkDeviceSize vertex_stride, uint32_t transform_offset,
VkFormat vertex_format, VkGeometryFlagsKHR flags,
Expand All @@ -57,45 +57,19 @@ uint64_t AccelerationStructure::add_triangle_geometry(std::unique_ptr<vkb::core:
geometry.geometry.triangles.maxVertex = max_vertex;
geometry.geometry.triangles.vertexStride = vertex_stride;
geometry.geometry.triangles.indexType = VK_INDEX_TYPE_UINT32;
geometry.geometry.triangles.vertexData.deviceAddress = vertex_buffer_data_address == 0 ? vertex_buffer->get_device_address() : vertex_buffer_data_address;
geometry.geometry.triangles.indexData.deviceAddress = index_buffer_data_address == 0 ? index_buffer->get_device_address() : index_buffer_data_address;
geometry.geometry.triangles.transformData.deviceAddress = transform_buffer_data_address == 0 ? transform_buffer->get_device_address() : transform_buffer_data_address;
geometry.geometry.triangles.vertexData.deviceAddress = vertex_buffer_data_address == 0 ? vertex_buffer.get_device_address() : vertex_buffer_data_address;
geometry.geometry.triangles.indexData.deviceAddress = index_buffer_data_address == 0 ? index_buffer.get_device_address() : index_buffer_data_address;
geometry.geometry.triangles.transformData.deviceAddress = transform_buffer_data_address == 0 ? transform_buffer.get_device_address() : transform_buffer_data_address;

uint64_t index = geometries.size();
geometries.insert({index, {geometry, triangle_count, transform_offset}});
return index;
}

uint64_t AccelerationStructure::add_triangle_geometry(vkb::core::Buffer const &vertex_buffer,
vkb::core::Buffer const &index_buffer,
vkb::core::Buffer const &transform_buffer,
uint32_t triangle_count, uint32_t max_vertex,
VkDeviceSize vertex_stride, uint32_t transform_offset,
VkFormat vertex_format, VkIndexType index_type,
VkGeometryFlagsKHR flags)
{
VkAccelerationStructureGeometryKHR geometry{};
geometry.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
geometry.geometryType = VK_GEOMETRY_TYPE_TRIANGLES_KHR;
geometry.flags = flags;
geometry.geometry.triangles.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR;
geometry.geometry.triangles.vertexFormat = vertex_format;
geometry.geometry.triangles.maxVertex = max_vertex;
geometry.geometry.triangles.vertexStride = vertex_stride;
geometry.geometry.triangles.indexType = index_type;
geometry.geometry.triangles.vertexData.deviceAddress = vertex_buffer.get_device_address();
geometry.geometry.triangles.indexData.deviceAddress = index_buffer.get_device_address();
geometry.geometry.triangles.transformData.deviceAddress = transform_buffer.get_device_address();

uint64_t index = geometries.size();
geometries.insert({index, {geometry, triangle_count, transform_offset}});
return index;
}

void AccelerationStructure::update_triangle_geometry(uint64_t triangleUUID,
std::unique_ptr<vkb::core::Buffer> &vertex_buffer,
std::unique_ptr<vkb::core::Buffer> &index_buffer,
std::unique_ptr<vkb::core::Buffer> &transform_buffer,
void AccelerationStructure::update_triangle_geometry(uint64_t triangleUUID,
std::unique_ptr<vkb::core::BufferC> &vertex_buffer,
std::unique_ptr<vkb::core::BufferC> &index_buffer,
std::unique_ptr<vkb::core::BufferC> &transform_buffer,
uint32_t triangle_count, uint32_t max_vertex,
VkDeviceSize vertex_stride, uint32_t transform_offset,
VkFormat vertex_format, VkGeometryFlagsKHR flags,
Expand All @@ -120,7 +94,7 @@ void AccelerationStructure::update_triangle_geometry(uint64_t
geometries[triangleUUID].updated = true;
}

uint64_t AccelerationStructure::add_instance_geometry(std::unique_ptr<vkb::core::Buffer> &instance_buffer, uint32_t instance_count, uint32_t transform_offset, VkGeometryFlagsKHR flags)
uint64_t AccelerationStructure::add_instance_geometry(std::unique_ptr<vkb::core::BufferC> &instance_buffer, uint32_t instance_count, uint32_t transform_offset, VkGeometryFlagsKHR flags)
{
VkAccelerationStructureGeometryKHR geometry{};
geometry.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
Expand All @@ -135,8 +109,8 @@ uint64_t AccelerationStructure::add_instance_geometry(std::unique_ptr<vkb::core:
return index;
}

void AccelerationStructure::update_instance_geometry(uint64_t instance_UID,
std::unique_ptr<vkb::core::Buffer> &instance_buffer,
void AccelerationStructure::update_instance_geometry(uint64_t instance_UID,
std::unique_ptr<vkb::core::BufferC> &instance_buffer,
uint32_t instance_count, uint32_t transform_offset,
VkGeometryFlagsKHR flags)
{
Expand Down Expand Up @@ -202,7 +176,7 @@ void AccelerationStructure::build(VkQueue queue, VkBuildAccelerationStructureFla
// Create a buffer for the acceleration structure
if (!buffer || buffer->get_size() != build_sizes_info.accelerationStructureSize)
{
buffer = std::make_unique<vkb::core::Buffer>(
buffer = std::make_unique<vkb::core::BufferC>(
device,
build_sizes_info.accelerationStructureSize,
VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
Expand All @@ -228,7 +202,7 @@ void AccelerationStructure::build(VkQueue queue, VkBuildAccelerationStructureFla
device_address = vkGetAccelerationStructureDeviceAddressKHR(device.get_handle(), &acceleration_device_address_info);

// Create a scratch buffer as a temporary storage for the acceleration structure build
scratch_buffer = std::make_unique<vkb::core::Buffer>(
scratch_buffer = std::make_unique<vkb::core::BufferC>(
device,
build_sizes_info.buildScratchSize,
VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
Expand Down
Loading

0 comments on commit b1f0fd0

Please sign in to comment.