aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/scene.hpp12
-rw-r--r--include/vk-device-types.hpp11
-rw-r--r--src/gltf.cpp12
-rw-r--r--src/main.cpp7
-rw-r--r--src/scene.cpp36
-rw-r--r--src/vk-device.cpp12
6 files changed, 33 insertions, 57 deletions
diff --git a/include/scene.hpp b/include/scene.hpp
index 0a5e82f..22eada5 100644
--- a/include/scene.hpp
+++ b/include/scene.hpp
@@ -43,12 +43,12 @@ public:
handle<device_buffer> bvh_buffer_handle;
handle<device_buffer> materials_buffer_handle;
- uint64_t indices_buffer_address() { return vkdevice::get().get_buffer(indices_buffer_handle)->device_address; };
- uint64_t positions_buffer_address() { return vkdevice::get().get_buffer(positions_buffer_handle)->device_address; };
- uint64_t normals_buffer_address() { return vkdevice::get().get_buffer(normals_buffer_handle)->device_address; };
- uint64_t uvs_buffer_address() { return vkdevice::get().get_buffer(uvs_buffer_handle)->device_address; };
- uint64_t bvh_buffer_address() { return vkdevice::get().get_buffer(bvh_buffer_handle)->device_address; };
- uint64_t materials_buffer_address() { return vkdevice::get().get_buffer(materials_buffer_handle)->device_address; };
+ uint64_t indices_buffer_address() { return vkdevice::get().get_buffer(indices_buffer_handle)->gpu_ptr; };
+ uint64_t positions_buffer_address() { return vkdevice::get().get_buffer(positions_buffer_handle)->gpu_ptr; };
+ uint64_t normals_buffer_address() { return vkdevice::get().get_buffer(normals_buffer_handle)->gpu_ptr; };
+ uint64_t uvs_buffer_address() { return vkdevice::get().get_buffer(uvs_buffer_handle)->gpu_ptr; };
+ uint64_t bvh_buffer_address() { return vkdevice::get().get_buffer(bvh_buffer_handle)->gpu_ptr; };
+ uint64_t materials_buffer_address() { return vkdevice::get().get_buffer(materials_buffer_handle)->gpu_ptr; };
};
#endif // !__SCENE_HPP_
diff --git a/include/vk-device-types.hpp b/include/vk-device-types.hpp
index bffaf16..dc47a4b 100644
--- a/include/vk-device-types.hpp
+++ b/include/vk-device-types.hpp
@@ -91,7 +91,6 @@ struct buffer_desc {
size_t size;
VkBufferUsageFlags usages;
VkMemoryPropertyFlags memory_properties;
- uint32_t memory_usage;
const char* name;
};
@@ -141,14 +140,14 @@ struct device_buffer {
};
struct graphics_pipeline_desc {
- uint8_t* vs_code;
+ const uint8_t* vs_code;
size_t vs_code_size;
- uint8_t* fs_code;
+ const uint8_t* fs_code;
size_t fs_code_size;
- VkFormat* color_attachments_format;
+ const VkFormat* color_attachments_format;
size_t color_attachments_format_count;
- VkFormat depth_attachment_format;
- VkFormat stencil_attachment_format;
+ const VkFormat depth_attachment_format;
+ const VkFormat stencil_attachment_format;
const char* name;
};
diff --git a/src/gltf.cpp b/src/gltf.cpp
index 8b5255c..67daade 100644
--- a/src/gltf.cpp
+++ b/src/gltf.cpp
@@ -158,24 +158,20 @@ static void load_textures(char* path, std::vector<handle<device_texture>>& textu
// samplers[sampler_index] = vkrenderer::create_sampler(VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT);
// }
- vkdevice& device = vkdevice::get();
-
constexpr auto buffers_count = 2U;
size_t buffer_size = 256U * MB;
handle<device_buffer> staging_buffers_handle[buffers_count] = {
- device.create_buffer({
+ vkdevice::get().create_buffer({
.size = buffer_size,
- .usages = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
+ .usages = VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "image upload staging buffer 0",
}),
- device.create_buffer({
+ vkdevice::get().create_buffer({
.size = buffer_size,
- .usages = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
+ .usages = VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "image upload staging buffer 1",
}),
};
diff --git a/src/main.cpp b/src/main.cpp
index 6b1cae3..8139264 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -237,7 +237,6 @@ int main() {
#if VK
.usages = VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
#else
.map = true,
.states = D3D12_RESOURCE_STATE_COPY_SOURCE,
@@ -251,9 +250,8 @@ int main() {
const handle<device_buffer> vertex_buffer_handle = render_device.create_buffer({
.size = MB * sizeof(uint32_t),
#if VK
- .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT,
+ .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "ImGui vertex buffer",
#else
#endif
@@ -264,7 +262,6 @@ int main() {
#if VK
.usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "ImGui index buffer",
#else
#endif
@@ -307,7 +304,7 @@ int main() {
.vs_code_size = vertex_code_size,
.fs_code = fragment_code,
.fs_code_size = fragment_code_size,
- .color_attachments_format = surface->surface_format.format,
+ .color_attachments_format = &surface->surface_format.format,
.color_attachments_format_count = 1U
});
diff --git a/src/scene.cpp b/src/scene.cpp
index 12499b0..5146bf8 100644
--- a/src/scene.cpp
+++ b/src/scene.cpp
@@ -178,79 +178,67 @@ scene::scene(const camera& cam, u16 width, u16 height)
{
indices_buffer_handle = vkdevice::get().create_buffer({
.size = indices.size() * sizeof(indices[0]),
- .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT,
+ .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "indices",
});
const auto& indices_buffer = vkdevice::get().get_buffer(indices_buffer_handle);
- void* ptr = indices_buffer->mapped_ptr;
- memcpy(ptr, indices.data(), indices.size() * sizeof(indices[0]));
+ memcpy(indices_buffer->cpu_ptr, indices.data(), indices.size() * sizeof(indices[0]));
}
{
positions_buffer_handle = vkdevice::get().create_buffer({
.size = positions.size() * sizeof(positions[0]),
- .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT,
+ .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "positions",
});
const auto& positions_buffer = vkdevice::get().get_buffer(positions_buffer_handle);
- void* ptr = positions_buffer->mapped_ptr;
- memcpy(ptr, positions.data(), positions.size() * sizeof(positions[0]));
+ memcpy(positions_buffer->cpu_ptr, positions.data(), positions.size() * sizeof(positions[0]));
}
{
normals_buffer_handle = vkdevice::get().create_buffer({
.size = normals.size() * sizeof(normals[0]),
- .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT,
+ .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "normals",
});
const auto& normals_buffer = vkdevice::get().get_buffer(normals_buffer_handle);
- void* ptr = normals_buffer->mapped_ptr;
- memcpy(ptr, normals.data(), normals.size() * sizeof(normals[0]));
+ memcpy(normals_buffer->cpu_ptr, normals.data(), normals.size() * sizeof(normals[0]));
}
{
uvs_buffer_handle = vkdevice::get().create_buffer({
.size = uvs.size() * sizeof(uvs[0]),
- .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT,
+ .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "uvs",
});
const auto& uvs_buffer = vkdevice::get().get_buffer(uvs_buffer_handle);
- void* ptr = uvs_buffer->mapped_ptr;
- memcpy(ptr, uvs.data(), uvs.size() * sizeof(uvs[0]));
+ memcpy(uvs_buffer->cpu_ptr, uvs.data(), uvs.size() * sizeof(uvs[0]));
}
{
bvh_buffer_handle = vkdevice::get().create_buffer({
.size = packed_nodes.size() * sizeof(packed_nodes[0]),
- .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT,
+ .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "bvh",
});
const auto& bvh_buffer = vkdevice::get().get_buffer(bvh_buffer_handle);
- void* ptr = bvh_buffer->mapped_ptr;
- memcpy(ptr, packed_nodes.data(), packed_nodes.size() * sizeof(packed_nodes[0]));
+ memcpy(bvh_buffer->cpu_ptr, packed_nodes.data(), packed_nodes.size() * sizeof(packed_nodes[0]));
}
{
materials_buffer_handle = vkdevice::get().create_buffer({
.size = materials.size() * sizeof(materials[0]),
- .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT,
+ .usages = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VMA_MEMORY_USAGE_CPU_TO_GPU,
.name = "materials",
});
const auto& materials_buffer = vkdevice::get().get_buffer(materials_buffer_handle);
- void* ptr = materials_buffer->mapped_ptr;
- memcpy(ptr, materials.data(), materials.size() * sizeof(materials[0]));
+ memcpy(materials_buffer->cpu_ptr, materials.data(), materials.size() * sizeof(materials[0]));
}
}
diff --git a/src/vk-device.cpp b/src/vk-device.cpp
index f35d02b..8e46205 100644
--- a/src/vk-device.cpp
+++ b/src/vk-device.cpp
@@ -41,8 +41,6 @@ static void create_heaps(size_t max_images, size_t max_samplers) {
.usages = VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT |
VK_BUFFER_USAGE_2_TRANSFER_DST_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
- VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
.name = "image descriptor_heap",
});
}
@@ -54,8 +52,6 @@ static void create_heaps(size_t max_images, size_t max_samplers) {
.usages = VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT |
VK_BUFFER_USAGE_2_TRANSFER_DST_BIT,
.memory_properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
- .memory_usage = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
- VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
.name = "sampler descriptor_heap",
});
}
@@ -94,14 +90,14 @@ static device_semaphore create_semaphore(const semaphore_desc& desc, const char*
}
-static VkShaderModule create_shader_module(uint8_t* code, size_t code_size) {
+static VkShaderModule create_shader_module(const uint8_t* code, size_t code_size) {
VkShaderModule shader_module;
VkShaderModuleCreateInfo create_info{
.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
.pNext = nullptr,
.flags = 0U,
.codeSize = code_size,
- .pCode = reinterpret_cast<uint32_t*>(code),
+ .pCode = reinterpret_cast<const uint32_t*>(code),
};
VK_CHECK(vkCreateShaderModule(device, &create_info, nullptr, &shader_module));
@@ -260,9 +256,9 @@ handle<device_buffer> vkdevice::create_buffer(const buffer_desc& desc) {
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
};
+ VmaAllocationCreateFlags flags = (desc.memory_properties & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) ? (VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT) : 0U;
VmaAllocationCreateInfo alloc_create_info{
- .flags = desc.memory_properties & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT ? VMA_ALLOCATION_CREATE_MAPPED_BIT : 0U,
- .usage = static_cast<VmaMemoryUsage>(desc.memory_usage),
+ .flags = flags,
.requiredFlags = desc.memory_properties,
};