diff options
| -rw-r--r-- | include/scene.hpp | 12 | ||||
| -rw-r--r-- | include/vk-device-types.hpp | 11 | ||||
| -rw-r--r-- | src/gltf.cpp | 12 | ||||
| -rw-r--r-- | src/main.cpp | 7 | ||||
| -rw-r--r-- | src/scene.cpp | 36 | ||||
| -rw-r--r-- | src/vk-device.cpp | 12 |
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, }; |
