diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gltf.cpp | 20 | ||||
| -rw-r--r-- | src/vk-device.cpp | 18 |
2 files changed, 23 insertions, 15 deletions
diff --git a/src/gltf.cpp b/src/gltf.cpp index 3e0af7d..8b5255c 100644 --- a/src/gltf.cpp +++ b/src/gltf.cpp @@ -25,11 +25,6 @@ struct buffer_view { #define GL_FLOAT 0x1406 #define GL_FIXED 0x140C -#define SCALAR 0x5343414C4152 -#define VEC2 0x56454332 -#define VEC3 0x56454333 -#define VEC4 0x56454334 - static u32 accessor_type_to_component_count(std::string_view& type) { if (strncmp("SCALAR", type.data(), type.size()) == 0) { return 1U; @@ -166,11 +161,7 @@ static void load_textures(char* path, std::vector<handle<device_texture>>& textu vkdevice& device = vkdevice::get(); constexpr auto buffers_count = 2U; - size_t total_size = images.size() * 4096U * 4096 * sizeof(uint32_t); - // TODO: Fix nasty stuff going on - // Crash on buffer destruction and load wrong images - // size_t buffer_size = total_size / 32U; - size_t buffer_size = total_size / 4U; + size_t buffer_size = 256U * MB; handle<device_buffer> staging_buffers_handle[buffers_count] = { device.create_buffer({ @@ -178,12 +169,14 @@ static void load_textures(char* path, std::vector<handle<device_texture>>& textu .usages = VK_BUFFER_USAGE_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({ .size = buffer_size, .usages = VK_BUFFER_USAGE_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", }), }; @@ -194,6 +187,7 @@ static void load_textures(char* path, std::vector<handle<device_texture>>& textu auto buffer_index = 0U; auto command_buffer = command_buffers[buffer_index]; auto buffer_handle = staging_buffers_handle[buffer_index]; + // FIX: when taking a reference to the buffer and we latter swap the buffers we override the referenced buffer device_buffer& buffer = device.get_buffer(buffer_handle); command_buffer.start(); @@ -219,7 +213,6 @@ static void load_textures(char* path, std::vector<handle<device_texture>>& textu u32 size = image.width * image.height * sizeof(uint32_t); if (buffer.allocated_size + size > buffer.size) { command_buffer.stop(); - device.submit(&command_buffer, 1); buffer_index = (buffer_index + 1U) % buffers_count; @@ -227,8 +220,8 @@ static void load_textures(char* path, std::vector<handle<device_texture>>& textu buffer_handle = staging_buffers_handle[buffer_index]; buffer = device.get_buffer(buffer_handle); buffer.reset(); - // TODO: Remove the wait - // device.wait(); + // TODO: Remove wait on device idle, wait on command buffer completion instead + device.wait(); command_buffer.start(); } @@ -245,6 +238,7 @@ static void load_textures(char* path, std::vector<handle<device_texture>>& textu command_buffer.stop(); device.submit(&command_buffer, 1); } + // TODO: Remove wait on device idle, wait on command buffer completion instead device.wait(); device.destroy_buffer(staging_buffers_handle[0]); device.destroy_buffer(staging_buffers_handle[1]); diff --git a/src/vk-device.cpp b/src/vk-device.cpp index 6fa3533..9c1b7a4 100644 --- a/src/vk-device.cpp +++ b/src/vk-device.cpp @@ -76,7 +76,19 @@ void vkdevice::deinit() { } -void vkdevice::wait() { vkDeviceWaitIdle(device); }; +void vkdevice::wait() { + vkDeviceWaitIdle(device); +}; + +void vkdevice::wait_for_fence(u64 value) { + VkSemaphoreWaitInfoKHR semaphore_wait_info { + .type = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR, + }; + semaphore_wait_info.pSemaphores = &semaphore; + semaphore_wait_info.semaphoreCount = 1; + semaphore_wait_info.pValues = &value; + VK_CHECK(vkWaitSemaphoresKHR(device->get_handle(), &semaphore_wait_info, UINT64_MAX)); +} handle<device_texture> vkdevice::create_texture(const texture_desc& desc) { device_texture device_texture; @@ -125,7 +137,9 @@ handle<device_buffer> vkdevice::create_buffer(const buffer_desc& desc) { .pUserData = nullptr, }; - VmaAllocationInfo alloc_info{}; + VmaAllocationInfo alloc_info{ + .pName = desc.name, + }; VKCHECK(vmaCreateBuffer(gpu_allocator, &create_info, &alloc_create_info, &device_buffer.vk_buffer, &device_buffer.alloc, &alloc_info)); vmaSetAllocationName(render_device.get_allocator(), device_buffer.alloc, desc.name); |
