2
0
Эх сурвалжийг харах

Started Vulkan multithreading implementation

Jef Belmans 2 жил өмнө
parent
commit
0ecf4f5728
28 өөрчлөгдсөн 434 нэмэгдсэн , 242 устгасан
  1. 1 1
      coral_renderer/CMakeLists.txt
  2. 37 2
      coral_renderer/coral_device.cpp
  3. 4 1
      coral_renderer/coral_device.h
  4. 0 1
      coral_renderer/coral_mesh.cpp
  5. 1 0
      coral_renderer/vk_job.cpp
  6. 112 0
      coral_renderer/vk_job.h
  7. 1 1
      minecraft_clone/first_app.cpp
  8. 49 56
      minecraft_clone/world_generator.cpp
  9. 26 8
      minecraft_clone/world_generator.h
  10. 2 2
      out/build/x64-Debug/.cmake/api/v1/reply/codemodel-v2-8a659e8ee73b4fb1cb15.json
  11. 2 2
      out/build/x64-Debug/.cmake/api/v1/reply/index-2023-07-13T13-08-41-0278.json
  12. 21 7
      out/build/x64-Debug/.cmake/api/v1/reply/target-coral_renderer-Debug-e484243eb20c6ba5194e.json
  13. 2 2
      out/build/x64-Debug/.cmake/api/v1/reply/target-minecraft_clone-Debug-a37a7ff1fdf0d845d510.json
  14. BIN
      out/build/x64-Debug/.ninja_deps
  15. 94 51
      out/build/x64-Debug/.ninja_log
  16. 2 2
      out/build/x64-Debug/Testing/Temporary/LastTest.log
  17. 9 1
      out/build/x64-Debug/build.ninja
  18. BIN
      out/build/x64-Debug/coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.pdb
  19. BIN
      out/build/x64-Debug/minecraft_clone/CMakeFiles/minecraft_clone.dir/vc140.pdb
  20. BIN
      out/build/x64-Debug/minecraft_clone/minecraft_clone.ilk
  21. BIN
      out/build/x64-Debug/minecraft_clone/minecraft_clone.pdb
  22. 1 1
      out/build/x64-Release/.cmake/api/v1/reply/codemodel-v2-a4508bed4f160a1273b9.json
  23. 2 2
      out/build/x64-Release/.cmake/api/v1/reply/index-2023-07-13T14-42-55-0102.json
  24. 17 3
      out/build/x64-Release/.cmake/api/v1/reply/target-coral_renderer-Release-b12a662925d1f1e7f887.json
  25. BIN
      out/build/x64-Release/.ninja_deps
  26. 40 96
      out/build/x64-Release/.ninja_log
  27. 2 2
      out/build/x64-Release/Testing/Temporary/LastTest.log
  28. 9 1
      out/build/x64-Release/build.ninja

+ 1 - 1
coral_renderer/CMakeLists.txt

@@ -30,7 +30,7 @@ add_library(coral_renderer
     "coral_frame_info.cpp"
     "coral_descriptors.h"
     "coral_descriptors.cpp"
-)
+ "vk_job.h" "vk_job.cpp")
 
 set(RendererIncludeDir "${CMAKE_CURRENT_SOURCE_DIR}" PARENT_SCOPE)
 

+ 37 - 2
coral_renderer/coral_device.cpp

@@ -14,7 +14,7 @@ using namespace coral_3d;
 coral_device::coral_device(coral_window& window) : window_{ window }
 {
     create_instance();
-    create_command_pool();
+    create_command_pools();
     create_sync_structures();
     create_command_buffers();
 }
@@ -232,6 +232,41 @@ void coral_device::transition_image_layout(VkImage image, VkFormat format, VkIma
     });
 }
 
+VkCommandPool coral_device::create_command_pool(VkCommandPoolCreateFlags create_flags)
+{
+    auto indices{ find_physical_queue_families() };
+
+    VkCommandPoolCreateInfo graphics_pool_info{
+        vkinit::command_pool_ci(indices.graphics_family, create_flags) };
+
+    VkCommandPool command_pool{};
+
+    // Create general pool
+    if (vkCreateCommandPool(device_, &graphics_pool_info, nullptr, &command_pool) != VK_SUCCESS)
+        throw std::runtime_error("ERROR! coral_device::create_command_pool() >> Failed to create command pool!");
+
+    deletion_queue_.deletors.emplace_front([=]() {
+        vkDestroyCommandPool(device_, command_pool, nullptr);
+        });
+
+    return command_pool;
+}
+
+VkCommandBuffer coral_device::create_command_buffer(VkCommandPool command_pool, VkCommandBufferLevel level)
+{
+    VkCommandBuffer command_buffer{};
+    VkCommandBufferAllocateInfo info{ vkinit::command_buffer_ai(command_pool, 1, level) };
+
+    if (vkAllocateCommandBuffers(device_, &info, &command_buffer)
+        != VK_SUCCESS)
+    {
+        throw std::runtime_error(
+            "ERROR! coral_device::create_command_buffers() >> Failed to create upload command buffer!");
+    }
+
+    return command_buffer;
+}
+
 void coral_device::create_instance()
 {
     std::cout << "Booting up Vulkan...\n\n";
@@ -301,7 +336,7 @@ void coral_device::create_surface()
     window_.create_window_surface(instance_, &surface_);
 }
 
-void coral_device::create_command_pool()
+void coral_device::create_command_pools()
 {
     auto indices { find_physical_queue_families() };
 

+ 4 - 1
coral_renderer/coral_device.h

@@ -76,12 +76,15 @@ namespace coral_3d
 		void copy_buffer_to_image(AllocatedBuffer buffer, AllocatedImage image, uint32_t width, uint32_t height, uint32_t layer_count);
 		void transition_image_layout(VkImage image, VkFormat format, VkImageLayout old_layout, VkImageLayout new_layout, uint32_t layer_count = 1, uint32_t mip_levels = 1);
 
+		VkCommandPool create_command_pool(VkCommandPoolCreateFlags create_flags = 0);
+		VkCommandBuffer create_command_buffer(VkCommandPool command_pool, VkCommandBufferLevel level = VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
 		VkPhysicalDeviceProperties properties;
 
 	private:
 		void create_instance();
 		void create_surface();
-		void create_command_pool();
+		void create_command_pools();
 		void create_sync_structures();
 		void create_command_buffers();
 

+ 0 - 1
coral_renderer/coral_mesh.cpp

@@ -228,7 +228,6 @@ void coral_mesh::create_vertex_buffers(const std::vector<Vertex>& vertices)
     staging_buffer.write_to_buffer((void*)vertices.data());
 
     device_.copy_buffer(staging_buffer.get_buffer(), vertex_buffer_->get_buffer(), buffer_size);
-
 }
 
 void coral_mesh::create_index_buffers(const std::vector<uint32_t>& indices)

+ 1 - 0
coral_renderer/vk_job.cpp

@@ -0,0 +1 @@
+#include "vk_job.h"

+ 112 - 0
coral_renderer/vk_job.h

@@ -0,0 +1,112 @@
+#pragma once
+
+// STD
+#include <condition_variable>
+#include <iostream>
+
+#include "vulkan/vulkan.h"
+
+enum class JobStatus : uint8_t
+{
+	PENDING,
+	IN_PROGRESS,
+	COMPLETE
+};
+
+class vk_job
+{
+public:
+	vk_job* pNext{ nullptr };
+	virtual void execute(VkCommandBuffer command_buffer) = 0;
+};
+
+class vk_work_queue final
+{
+public:
+	vk_job* pFirst_{ nullptr };
+	vk_job* pLast_{ nullptr };
+	std::mutex mutex_{};
+	std::mutex log_mutex_{};
+
+	std::condition_variable job_flag_;
+	std::condition_variable job_done_flag_;
+
+	void push(vk_job* pJob)
+	{
+		if (!pFirst_)
+			pFirst_ = pJob;
+		else
+			pLast_->pNext = pJob;
+
+		pLast_ = pJob;
+	}
+
+	vk_job* pop()
+	{
+		vk_job* pCurrent = pFirst_;
+		if (pCurrent)
+		{
+			pFirst_ = pCurrent->pNext;
+			if(!pFirst_)
+				pLast_ = nullptr;
+		}
+
+		return pCurrent;
+	}
+
+	bool done()
+	{
+		return !pFirst_;
+	}
+};
+
+class worker_thread final
+{
+public:
+	bool& done_;
+	vk_work_queue& work_queue_;
+	unsigned int id_;
+
+	VkCommandBuffer command_buffer_{ VK_NULL_HANDLE };
+
+	worker_thread(bool& done, vk_work_queue& work_queue, unsigned int id, VkCommandBuffer command_buffer)
+		: done_(done), work_queue_(work_queue), id_(id), command_buffer_{ command_buffer } {}
+
+	void operator()()
+	{
+		work_queue_.log_mutex_.lock();
+		std::cout << "Worker thread " << id_ << " started" << std::endl;
+		work_queue_.log_mutex_.unlock();
+		
+		while (!done_)
+		{
+			// Wait until there is a job or until time-out
+			std::unique_lock<std::mutex> lock(work_queue_.mutex_);
+			bool result = work_queue_.job_flag_.wait_until(
+				lock,
+				std::chrono::system_clock::now() + std::chrono::milliseconds(200),
+				[&] { return !work_queue_.done(); }
+			);
+
+			if (result)
+			{
+				vk_job* pending_job = work_queue_.pop();
+				if (!pending_job) continue;
+
+				// We've got our job, we can unlock the mutex
+				lock.unlock();
+
+				// Execute the job
+				pending_job->execute(command_buffer_);
+				work_queue_.log_mutex_.lock();
+				std::cout << "Job finished by thread " << id_ << std::endl;
+				work_queue_.log_mutex_.unlock();
+				work_queue_.job_done_flag_.notify_one();
+			}
+		}
+
+		work_queue_.log_mutex_.lock();
+		std::cout << "Worker thread " << id_ << " stopped" << std::endl;
+		work_queue_.log_mutex_.unlock();
+	}
+};

+ 1 - 1
minecraft_clone/first_app.cpp

@@ -108,7 +108,7 @@ void first_app::run()
             global_ubo.flush_index(frame_index);
 
             // UPDATE CHUNKS
-            world_generator_.update_world(camera.get_position());
+            // world_generator_.update_world(camera.get_position());
 
             // RENDER
 			renderer_.begin_swapchain_render_pass(command_buffer);

+ 49 - 56
minecraft_clone/world_generator.cpp

@@ -12,13 +12,23 @@
 world_generator::world_generator(coral_3d::coral_device& device)
 	: device_{ device }
 {
-	update_thread_ = std::jthread(&world_generator::update_thread, this);
+	thread_count_ = std::thread::hardware_concurrency() - 1;
+	worker_threads_.reserve(thread_count_);
+	command_pools_.reserve(thread_count_);
+	for (size_t i = 0; i < thread_count_; i++)
+	{
+		command_pools_.emplace_back(device_.create_command_pool(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT));
+		worker_threads_.emplace_back(std::jthread(
+			worker_thread(threads_finished_, work_queue_, i, device_.create_command_buffer(command_pools_[i]))
+		));
+	}
 }
 
 world_generator::~world_generator()
 {
-	update_thread_running_ = false;
-	cv_.notify_all();
+	threads_finished_ = true;
+	for (size_t i = 0; i < thread_count_; i++)
+		worker_threads_[i].join();
 }
 
 /*======================== World Generation ========================*/
@@ -50,68 +60,36 @@ void world_generator::update_world(const glm::vec3& position)
 
 	if(old_player_chunk_coord == player_chunk_coord) return;
 
+	old_player_chunk_coord = player_chunk_coord;
+	for (auto& chunk : chunks_)
 	{
-		std::lock_guard<std::mutex> lock(cv_mutex_);
-		old_player_chunk_coord = player_chunk_coord;
-		for (auto& chunk : chunks_)
-		{
-			chunk.is_active = false;
-		}
-
-		// Get the chunks around the player
-		uint64_t num_chunks = static_cast<uint64_t>(chunks_.size());
-		for (int x = -render_distance_; x <= render_distance_; x++)
-		{
-			for (int z = -render_distance_; z <= render_distance_; z++)
-			{
-				glm::ivec2 chunk_coord{ old_player_chunk_coord.x + x, old_player_chunk_coord.y + z };
-				Chunk* chunk = get_chunk_at_coord(chunk_coord);
-
-				if (chunk)
-					chunk->is_active = true;
-				else
-					chunks_to_generate_.emplace_back(chunk_coord);
-			}
-		}
+		chunk.is_active = false;
 	}
 
-	cv_.notify_all();
-}
-
-void world_generator::update_thread()
-{
-	while (true)
+	// Get the chunks around the player
+	uint64_t num_chunks = static_cast<uint64_t>(chunks_.size());
+	for (int x = -render_distance_; x <= render_distance_; x++)
 	{
-		std::unique_lock<std::mutex> lock(cv_mutex_);
-		cv_.wait(lock, [&] {return !chunks_to_generate_.empty() || !update_thread_running_; });
-
-		if(!update_thread_running_) return;
-
-		auto start = std::chrono::high_resolution_clock::now();
-	
-		// Generate the new chunks around the player
-		for (const glm::ivec2& coord : chunks_to_generate_)
+		for (int z = -render_distance_; z <= render_distance_; z++)
 		{
-			std::cout << "Building new chunk: " << coord.x << ", " << coord.y << "\n";
-			auto start = std::chrono::high_resolution_clock::now();
+			glm::ivec2 chunk_coord{ old_player_chunk_coord.x + x, old_player_chunk_coord.y + z };
+			Chunk* chunk = get_chunk_at_coord(chunk_coord);
 
-			auto& chunk = chunks_.emplace_back(generate_chunk(coord));
-			rebuild_surrounding_chunks(chunk);
-			build_chunk(chunk);
+			if (chunk)
+				chunk->is_active = true;
+			else
+				work_queue_.push(new GenerateChunk(device_, *this, chunk_coord));
+		}
+	}
 
-			auto end = std::chrono::high_resolution_clock::now();
-			auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
+	work_queue_.job_flag_.notify_all();
+	std::unique_lock<std::mutex> lock(work_queue_.mutex_);
+	work_queue_.job_done_flag_.wait(lock, [&] {return work_queue_.done(); });
 
-			std::cout << "\tTook: " << duration << "ms\n\n";
-		}
+	// TODO: get command buffers from worker threads and execute them to the main buffer
+	// Then submit the main buffer to the graphics queue
 
-		chunks_to_generate_.clear();
-		lock.unlock();
 
-		auto end = std::chrono::high_resolution_clock::now();
-		auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
-		std::cout << "Updating entire world took: " << duration << "ms\n\n";
-	}
 }
 
 Chunk world_generator::generate_chunk(const glm::ivec2& coord)
@@ -250,6 +228,7 @@ void world_generator::build_chunk_mesh(Chunk& chunk)
 }
 
 /*======================== Chunk Getters ========================*/
+#pragma region Chunk Getters
 glm::ivec2 world_generator::get_coord(const glm::vec3& position)
 {
 	return
@@ -295,4 +274,18 @@ BlockType world_generator::get_block_at_position(const glm::vec3& position)
 	if (!chunk->block_map.contains(chunk_relative_position)) return BlockType::AIR;
 		
 	return chunk->block_map[chunk_relative_position];
-}
+}
+#pragma endregion
+
+/* ======================================================= Jobs ======================================================= */
+#pragma region Jobs
+GenerateChunk::GenerateChunk(coral_3d::coral_device& device, world_generator& generator, const glm::ivec2& chunk_coord)
+	: device_{ device }, generator_{ generator }, chunk_coord_{ chunk_coord } {}
+
+void GenerateChunk::execute(VkCommandBuffer command_buffer)
+{
+	Chunk& chunk = generator_.chunks_.emplace_back(generator_.generate_chunk(chunk_coord_));
+	generator_.rebuild_surrounding_chunks(chunk);
+	generator_.build_chunk(chunk);
+}
+#pragma endregion

+ 26 - 8
minecraft_clone/world_generator.h

@@ -4,9 +4,11 @@
 #include <condition_variable>
 #include <thread>
 
+#include "vk_job.h"
 #include "chunk.h"
 
 
+
 class coral_3d::coral_device;
 class world_generator final
 {
@@ -18,6 +20,7 @@ public:
 	void update_world(const glm::vec3& position);
 
 	std::vector<Chunk>& get_chunks() { return chunks_; }
+
 private:
 
 	Chunk generate_chunk(const glm::ivec2& coord);
@@ -35,21 +38,36 @@ private:
 
 	BlockType get_block_at_position(const glm::vec3& position);
 
-	void update_thread();
-
 	coral_3d::coral_device& device_;
 
-	const uint16_t render_distance_{ 5 }; // In chunks, in each direction (render_distance * 2 + 1)
+	const uint16_t render_distance_{ 1 }; // In chunks, in each direction (render_distance * 2 + 1)
 	const uint16_t chunk_size_{ 16 };
 	const uint16_t world_height_{ 32 };
 
 	std::vector<Chunk> chunks_{};
 	std::vector<glm::ivec2> chunks_to_generate_{};
-
+	std::vector<Chunk*> chunks_to_build_{};
 	glm::ivec2 old_player_chunk_coord{0};
 
-	std::condition_variable cv_{}; // Condition variable for the update thread
-	std::mutex cv_mutex_{}; // Mutex for the condition variable
-	std::jthread update_thread_{};
-	bool update_thread_running_{ true };
+	// Multithreading
+	size_t thread_count_{ 0 };
+	std::vector<VkCommandPool> command_pools_{};
+	std::vector<std::jthread> worker_threads_{};
+	bool threads_finished_{ false };
+	vk_work_queue work_queue_{};
+
+	friend class GenerateChunk;
+};
+
+/* ================ Jobs ================ */
+class GenerateChunk final : public vk_job
+{
+public:
+	GenerateChunk(coral_3d::coral_device& device, world_generator& generator, const glm::ivec2& chunk_coord);
+	virtual void execute(VkCommandBuffer command_buffer) override;
+
+private:
+	coral_3d::coral_device& device_;
+	world_generator& generator_;
+	const glm::ivec2& chunk_coord_;
 };

+ 2 - 2
out/build/x64-Debug/.cmake/api/v1/reply/codemodel-v2-4b84e34ec8133a453d8f.json → out/build/x64-Debug/.cmake/api/v1/reply/codemodel-v2-8a659e8ee73b4fb1cb15.json

@@ -164,7 +164,7 @@
 				{
 					"directoryIndex" : 1,
 					"id" : "coral_renderer::@189d46817749ee15bd40",
-					"jsonFile" : "target-coral_renderer-Debug-945d138dde7695d496ba.json",
+					"jsonFile" : "target-coral_renderer-Debug-e484243eb20c6ba5194e.json",
 					"name" : "coral_renderer",
 					"projectIndex" : 0
 				},
@@ -178,7 +178,7 @@
 				{
 					"directoryIndex" : 2,
 					"id" : "minecraft_clone::@c307b48454f3344e687f",
-					"jsonFile" : "target-minecraft_clone-Debug-9694159fa8b2e3ffd603.json",
+					"jsonFile" : "target-minecraft_clone-Debug-a37a7ff1fdf0d845d510.json",
 					"name" : "minecraft_clone",
 					"projectIndex" : 0
 				},

+ 2 - 2
out/build/x64-Debug/.cmake/api/v1/reply/index-2023-07-11T22-33-23-0881.json → out/build/x64-Debug/.cmake/api/v1/reply/index-2023-07-13T13-08-41-0278.json

@@ -26,7 +26,7 @@
 	"objects" : 
 	[
 		{
-			"jsonFile" : "codemodel-v2-4b84e34ec8133a453d8f.json",
+			"jsonFile" : "codemodel-v2-8a659e8ee73b4fb1cb15.json",
 			"kind" : "codemodel",
 			"version" : 
 			{
@@ -108,7 +108,7 @@
 						}
 					},
 					{
-						"jsonFile" : "codemodel-v2-4b84e34ec8133a453d8f.json",
+						"jsonFile" : "codemodel-v2-8a659e8ee73b4fb1cb15.json",
 						"kind" : "codemodel",
 						"version" : 
 						{

+ 21 - 7
out/build/x64-Debug/.cmake/api/v1/reply/target-coral_renderer-Debug-945d138dde7695d496ba.json → out/build/x64-Debug/.cmake/api/v1/reply/target-coral_renderer-Debug-e484243eb20c6ba5194e.json

@@ -142,7 +142,8 @@
 				24,
 				26,
 				28,
-				30
+				30,
+				32
 			]
 		}
 	],
@@ -152,14 +153,14 @@
 			"backtrace" : 3,
 			"id" : "vkbootstrap::@037116246cbfaaeb5504"
 		},
-		{
-			"backtrace" : 3,
-			"id" : "tinyobjloader::@037116246cbfaaeb5504"
-		},
 		{
 			"backtrace" : 4,
 			"id" : "Shaders::@189d46817749ee15bd40"
 		},
+		{
+			"backtrace" : 3,
+			"id" : "tinyobjloader::@037116246cbfaaeb5504"
+		},
 		{
 			"backtrace" : 3,
 			"id" : "glfw::@6b3fa3a0e2a82742d65f"
@@ -194,7 +195,8 @@
 				23,
 				25,
 				27,
-				29
+				29,
+				31
 			]
 		},
 		{
@@ -215,7 +217,8 @@
 				24,
 				26,
 				28,
-				30
+				30,
+				32
 			]
 		}
 	],
@@ -390,6 +393,17 @@
 			"compileGroupIndex" : 0,
 			"path" : "coral_renderer/coral_descriptors.cpp",
 			"sourceGroupIndex" : 1
+		},
+		{
+			"backtrace" : 1,
+			"path" : "coral_renderer/vk_job.h",
+			"sourceGroupIndex" : 0
+		},
+		{
+			"backtrace" : 1,
+			"compileGroupIndex" : 0,
+			"path" : "coral_renderer/vk_job.cpp",
+			"sourceGroupIndex" : 1
 		}
 	],
 	"type" : "STATIC_LIBRARY"

+ 2 - 2
out/build/x64-Debug/.cmake/api/v1/reply/target-minecraft_clone-Debug-9694159fa8b2e3ffd603.json → out/build/x64-Debug/.cmake/api/v1/reply/target-minecraft_clone-Debug-a37a7ff1fdf0d845d510.json

@@ -148,11 +148,11 @@
 		},
 		{
 			"backtrace" : 3,
-			"id" : "tinyobjloader::@037116246cbfaaeb5504"
+			"id" : "coral_renderer::@189d46817749ee15bd40"
 		},
 		{
 			"backtrace" : 3,
-			"id" : "coral_renderer::@189d46817749ee15bd40"
+			"id" : "tinyobjloader::@037116246cbfaaeb5504"
 		},
 		{
 			"backtrace" : 3,

BIN
out/build/x64-Debug/.ninja_deps


+ 94 - 51
out/build/x64-Debug/.ninja_log

@@ -15,7 +15,7 @@
 68	719	7108126999676684	third_party/GLFW/src/CMakeFiles/glfw.dir/wgl_context.c.obj	3afd0e43a8a16dc7
 30	725	7108126999762129	third_party/GLFW/src/CMakeFiles/glfw.dir/init.c.obj	5f4a50f3267d8484
 55	726	7108126999812189	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_monitor.c.obj	e5281a6601c9ad8f
-25	1989	7108888042966097	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
+15	1597	7109043135478884	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
 27	725	7108126999812189	third_party/GLFW/src/CMakeFiles/glfw.dir/context.c.obj	1ba1283f035e00a8
 729	783	7108127000557160	third_party/GLFW/src/glfw3.lib	72cb3f0d3bdbe8a5
 34	728	7108126999978088	third_party/GLFW/src/CMakeFiles/glfw.dir/input.c.obj	ad4c648576f9cac1
@@ -35,7 +35,7 @@
 32	1186	7108888034945041	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_renderer.cpp.obj	51e1bcde404a6192
 12	1136	7108888034447200	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	e91c1daf7373c0cf
 173	1682	7108127009566783	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	4b8d23051f1c25e2
-865	1285	7108890679994621	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+1653	2029	7109043137708564	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
 24	1795	7108127010703447	third_party/CMakeFiles/tinyobjloader.dir/tinyobjloader/tiny_obj_loader.cc.obj	cc3766067532a1e2
 35	1121	7108888034264767	minecraft_clone/CMakeFiles/minecraft_clone.dir/atlas_generator.cpp.obj	8a773b33d95615c3
 15	1183	7108888034910014	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	4e458661fcddbdb1
@@ -45,55 +45,98 @@
 11	1387	7108180084430192	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	83f3a71b3d1f619b
 1957	2003	7108127012735014	third_party/vkbootstrap.lib	70c0e9f308a489de
 5	1312	7108888036194878	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	2ad3b241ec9556b6
-4	865	7108890678948950	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_data.cpp.obj	c95e59058c69337d
-22	1373	7108888036812375	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
-9	1761	7108888040686524	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	1dd7ba116b7c3ece
-39	2025	7108888043323606	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
 12	874	7108890969653142	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_data.cpp.obj	c95e59058c69337d
-875	1170	7108890970712922	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-5	1369	7108946157804208	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
-8	1865	7108946162762039	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
-12	1888	7108946162977688	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1888	2309	7108946164687044	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-11	1577	7108946803719190	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1577	1865	7108946804783218	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-14	1359	7108999663521300	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
-18	1863	7108999668556517	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
-21	1888	7108999668800253	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1888	2192	7108999669945278	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-18	1624	7109002618526398	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1624	2012	7109002619681199	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-4	1104	7109006600380817	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
-7	1609	7109006605423111	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
-10	1621	7109006605538542	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1621	1989	7109006607262468	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-11	1940	7109008832837960	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1940	2223	7109008833915635	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-11	2064	7109008981839317	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-2064	2359	7109008982946083	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-11	1553	7109009889393626	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1553	1833	7109009890507857	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-18	1427	7109034704323492	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
-22	1873	7109034708772519	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
-25	1920	7109034709240435	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1920	2314	7109034711081125	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-5	1631	7109035392735843	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1631	1928	7109035393828226	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-11	1721	7109035840372814	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1722	2025	7109035841479432	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-12	1692	7109037316547612	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1692	1993	7109037317708755	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-4	1579	7109038837499948	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1579	1871	7109038838588817	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-11	1638	7109040471024625	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1638	1943	7109040472188909	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-4	1033	7109041869546874	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
-7	1578	7109041874996741	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
-10	1625	7109041875461631	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1625	1919	7109041876585298	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
-11	1616	7109042573004098	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1617	1925	7109042574179262	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
 11	1158	7109043131103710	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
-15	1597	7109043135478884	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
+9	1761	7108888040686524	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	1dd7ba116b7c3ece
 18	1653	7109043136030757	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
-1653	2029	7109043137708564	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+30	1617	7109618129221229	coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.cpp.obj	b604da246ced7299
+52	1628	7109618129342474	coral_renderer/CMakeFiles/coral_renderer.dir/vk_job.cpp.obj	157ad77a6a79b56f
+49	1670	7109618129767304	coral_renderer/CMakeFiles/coral_renderer.dir/coral_descriptors.cpp.obj	c662391e5a2d5cb6
+27	1909	7109618132132916	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	e91c1daf7373c0cf
+73	1926	7109618132274095	minecraft_clone/CMakeFiles/minecraft_clone.dir/atlas_generator.cpp.obj	8a773b33d95615c3
+37	1937	7109618132416704	coral_renderer/CMakeFiles/coral_renderer.dir/coral_texture.cpp.obj	794b98674d4a018b
+46	1938	7109618132436730	coral_renderer/CMakeFiles/coral_renderer.dir/coral_frame_info.cpp.obj	fca11dbf4e05b9f0
+20	1945	7109618132507517	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	4b8d23051f1c25e2
+69	1999	7109618133065370	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_renderer.cpp.obj	51e1bcde404a6192
+34	2004	7109618133100400	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	4e458661fcddbdb1
+41	2040	7109618133450337	coral_renderer/CMakeFiles/coral_renderer.dir/coral_buffer.cpp.obj	465bd8d331e5d360
+17	2069	7109618133759053	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	83f3a71b3d1f619b
+64	2122	7109618134280264	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_data.cpp.obj	c95e59058c69337d
+13	2133	7109618134396231	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	2ad3b241ec9556b6
+24	2592	7109618138972351	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	1dd7ba116b7c3ece
+12	97	7109618238758372	coral_renderer/coral_renderer.lib	d7c728ab0ac7332
+22	1802	7109623223829730	coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.cpp.obj	b604da246ced7299
+41	1808	7109623223899796	coral_renderer/CMakeFiles/coral_renderer.dir/coral_descriptors.cpp.obj	c662391e5a2d5cb6
+60	1874	7109623224561075	minecraft_clone/CMakeFiles/minecraft_clone.dir/atlas_generator.cpp.obj	8a773b33d95615c3
+29	1877	7109623224576087	coral_renderer/CMakeFiles/coral_renderer.dir/coral_texture.cpp.obj	794b98674d4a018b
+18	1879	7109623224626425	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	e91c1daf7373c0cf
+37	1930	7109623225126315	coral_renderer/CMakeFiles/coral_renderer.dir/coral_frame_info.cpp.obj	fca11dbf4e05b9f0
+11	1937	7109623225196372	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	4b8d23051f1c25e2
+25	1939	7109623225217059	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	4e458661fcddbdb1
+56	1978	7109623225597599	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_renderer.cpp.obj	51e1bcde404a6192
+33	2026	7109623226078322	coral_renderer/CMakeFiles/coral_renderer.dir/coral_buffer.cpp.obj	465bd8d331e5d360
+8	2077	7109623226599354	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	83f3a71b3d1f619b
+5	2122	7109623227014958	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	2ad3b241ec9556b6
+52	2126	7109623227051176	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_data.cpp.obj	c95e59058c69337d
+15	2600	7109623231826242	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	1dd7ba116b7c3ece
+11	85	7109623486838316	coral_renderer/coral_renderer.lib	d7c728ab0ac7332
+9	1339	7109624591090990	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
+12	1912	7109624596798168	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
+15	1963	7109624597306480	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1964	2512	7109624599992383	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+12	1609	7109624980795334	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1609	1895	7109624981877122	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+4	713	7109625712751676	coral_renderer/CMakeFiles/coral_renderer.dir/vk_job.cpp.obj	157ad77a6a79b56f
+714	799	7109625713239631	coral_renderer/coral_renderer.lib	d7c728ab0ac7332
+8	1283	7109625718438135	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
+11	1855	7109625724151042	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
+13	1922	7109625724796117	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1922	2227	7109625725953565	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+12	1753	7109628223645470	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1753	2078	7109628224874506	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+11	1063	7109628355205543	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
+15	1608	7109628360657029	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
+17	1652	7109628361083229	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1652	2006	7109628362706644	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+11	1708	7109630386160624	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1708	2000	7109630387290977	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+11	1732	7109630917367041	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1732	2036	7109630918550858	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+4	1084	7109632062235875	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
+8	1647	7109632067849093	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
+11	1670	7109632068074718	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1670	1965	7109632069199534	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+4	1652	7109632605142992	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
+8	2363	7109632612253381	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
+11	2434	7109632612957442	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+2434	2832	7109632614778721	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+4	1610	7109633231269683	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1610	1898	7109633232367304	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+12	1750	7109634509065884	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1751	2055	7109634510251727	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+4	1628	7109635410940929	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1628	1930	7109635412095548	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+11	1736	7109635761661422	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1736	2048	7109635762919185	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+11	1609	7109640110650257	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1609	1905	7109640111819148	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013
+21	1208	7109694410777507	coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.cpp.obj	b604da246ced7299
+39	1286	7109694411566797	coral_renderer/CMakeFiles/coral_renderer.dir/vk_job.cpp.obj	157ad77a6a79b56f
+36	1302	7109694411717577	coral_renderer/CMakeFiles/coral_renderer.dir/coral_descriptors.cpp.obj	c662391e5a2d5cb6
+33	1383	7109694412537058	coral_renderer/CMakeFiles/coral_renderer.dir/coral_frame_info.cpp.obj	fca11dbf4e05b9f0
+54	1472	7109694413411028	minecraft_clone/CMakeFiles/minecraft_clone.dir/atlas_generator.cpp.obj	8a773b33d95615c3
+18	1482	7109694413511799	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	e91c1daf7373c0cf
+12	1483	7109694413506801	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	4b8d23051f1c25e2
+51	1498	7109694413658051	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_renderer.cpp.obj	51e1bcde404a6192
+27	1520	7109694413878808	coral_renderer/CMakeFiles/coral_renderer.dir/coral_texture.cpp.obj	794b98674d4a018b
+30	1536	7109694414049846	coral_renderer/CMakeFiles/coral_renderer.dir/coral_buffer.cpp.obj	465bd8d331e5d360
+24	1553	7109694414243418	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	4e458661fcddbdb1
+48	1636	7109694415074873	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_data.cpp.obj	c95e59058c69337d
+8	1639	7109694415099902	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	83f3a71b3d1f619b
+5	1673	7109694415447865	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	2ad3b241ec9556b6
+42	1829	7109694417012739	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	838eede5482a47f8
+15	2124	7109694419947442	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	1dd7ba116b7c3ece
+45	2375	7109694422459471	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	e1882e4a9647373b
+12	92	7109694779236214	coral_renderer/coral_renderer.lib	d7c728ab0ac7332
+16	1689	7109694795502451	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	e2637c078342451e
+1690	2051	7109694797101468	minecraft_clone/minecraft_clone.exe	7da0b2f7ca2013

+ 2 - 2
out/build/x64-Debug/Testing/Temporary/LastTest.log

@@ -1,3 +1,3 @@
-Start testing: Jul 12 00:33 Romance Daylight Time
+Start testing: Jul 13 15:08 Romance Daylight Time
 ----------------------------------------------------------
-End testing: Jul 12 00:33 Romance Daylight Time
+End testing: Jul 13 15:08 Romance Daylight Time

+ 9 - 1
out/build/x64-Debug/build.ninja

@@ -227,6 +227,14 @@ build coral_renderer\CMakeFiles\coral_renderer.dir\coral_descriptors.cpp.obj: CX
   TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.pdb
   TARGET_PDB = coral_renderer\coral_renderer.pdb
 
+build coral_renderer\CMakeFiles\coral_renderer.dir\vk_job.cpp.obj: CXX_COMPILER__coral_renderer_unscanned_Debug E$:\Game$ Development\Visual$ Studio$ Solutions\Coral3D\coral_renderer\vk_job.cpp || cmake_object_order_depends_target_coral_renderer
+  FLAGS = /DWIN32 /D_WINDOWS /EHsc /Zi /Ob0 /Od /RTC1 -std:c++latest -MDd /W4 /WX /w
+  INCLUDES = -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\GLFW\include" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\glm" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\vkbootstrap" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\tinyobjloader" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\vma" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\stb_image" -external:IC:\VulkanSDK\1.3.250.0\Include -external:W0
+  OBJECT_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  OBJECT_FILE_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.pdb
+  TARGET_PDB = coral_renderer\coral_renderer.pdb
+
 
 # =============================================================================
 # Link build statements for STATIC_LIBRARY target coral_renderer
@@ -235,7 +243,7 @@ build coral_renderer\CMakeFiles\coral_renderer.dir\coral_descriptors.cpp.obj: CX
 #############################################
 # Link the static library coral_renderer\coral_renderer.lib
 
-build coral_renderer\coral_renderer.lib: CXX_STATIC_LIBRARY_LINKER__coral_renderer_Debug coral_renderer\CMakeFiles\coral_renderer.dir\coral_window.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_pipeline.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_device.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_initializers.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_swapchain.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_mesh.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\render_system.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_camera.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_utils.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_texture.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_buffer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_frame_info.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_descriptors.cpp.obj || coral_renderer\Shaders third_party\GLFW\src\glfw3.lib third_party\tinyobjloader.lib third_party\vkbootstrap.lib
+build coral_renderer\coral_renderer.lib: CXX_STATIC_LIBRARY_LINKER__coral_renderer_Debug coral_renderer\CMakeFiles\coral_renderer.dir\coral_window.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_pipeline.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_device.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_initializers.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_swapchain.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_mesh.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\render_system.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_camera.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_utils.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_texture.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_buffer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_frame_info.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_descriptors.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_job.cpp.obj || coral_renderer\Shaders third_party\GLFW\src\glfw3.lib third_party\tinyobjloader.lib third_party\vkbootstrap.lib
   LANGUAGE_COMPILE_FLAGS = /DWIN32 /D_WINDOWS /EHsc /Zi /Ob0 /Od /RTC1 -MDd
   LINK_FLAGS = /machine:x64
   OBJECT_DIR = coral_renderer\CMakeFiles\coral_renderer.dir

BIN
out/build/x64-Debug/coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.pdb


BIN
out/build/x64-Debug/minecraft_clone/CMakeFiles/minecraft_clone.dir/vc140.pdb


BIN
out/build/x64-Debug/minecraft_clone/minecraft_clone.ilk


BIN
out/build/x64-Debug/minecraft_clone/minecraft_clone.pdb


+ 1 - 1
out/build/x64-Release/.cmake/api/v1/reply/codemodel-v2-04d3f88054399b941d94.json → out/build/x64-Release/.cmake/api/v1/reply/codemodel-v2-a4508bed4f160a1273b9.json

@@ -164,7 +164,7 @@
 				{
 					"directoryIndex" : 1,
 					"id" : "coral_renderer::@189d46817749ee15bd40",
-					"jsonFile" : "target-coral_renderer-Release-50efa119b4f0c302455f.json",
+					"jsonFile" : "target-coral_renderer-Release-b12a662925d1f1e7f887.json",
 					"name" : "coral_renderer",
 					"projectIndex" : 0
 				},

+ 2 - 2
out/build/x64-Release/.cmake/api/v1/reply/index-2023-07-11T21-44-59-0119.json → out/build/x64-Release/.cmake/api/v1/reply/index-2023-07-13T14-42-55-0102.json

@@ -26,7 +26,7 @@
 	"objects" : 
 	[
 		{
-			"jsonFile" : "codemodel-v2-04d3f88054399b941d94.json",
+			"jsonFile" : "codemodel-v2-a4508bed4f160a1273b9.json",
 			"kind" : "codemodel",
 			"version" : 
 			{
@@ -108,7 +108,7 @@
 						}
 					},
 					{
-						"jsonFile" : "codemodel-v2-04d3f88054399b941d94.json",
+						"jsonFile" : "codemodel-v2-a4508bed4f160a1273b9.json",
 						"kind" : "codemodel",
 						"version" : 
 						{

+ 17 - 3
out/build/x64-Release/.cmake/api/v1/reply/target-coral_renderer-Release-50efa119b4f0c302455f.json → out/build/x64-Release/.cmake/api/v1/reply/target-coral_renderer-Release-b12a662925d1f1e7f887.json

@@ -142,7 +142,8 @@
 				24,
 				26,
 				28,
-				30
+				30,
+				32
 			]
 		}
 	],
@@ -194,7 +195,8 @@
 				23,
 				25,
 				27,
-				29
+				29,
+				31
 			]
 		},
 		{
@@ -215,7 +217,8 @@
 				24,
 				26,
 				28,
-				30
+				30,
+				32
 			]
 		}
 	],
@@ -390,6 +393,17 @@
 			"compileGroupIndex" : 0,
 			"path" : "coral_renderer/coral_descriptors.cpp",
 			"sourceGroupIndex" : 1
+		},
+		{
+			"backtrace" : 1,
+			"path" : "coral_renderer/vk_job.h",
+			"sourceGroupIndex" : 0
+		},
+		{
+			"backtrace" : 1,
+			"compileGroupIndex" : 0,
+			"path" : "coral_renderer/vk_job.cpp",
+			"sourceGroupIndex" : 1
 		}
 	],
 	"type" : "STATIC_LIBRARY"

BIN
out/build/x64-Release/.ninja_deps


+ 40 - 96
out/build/x64-Release/.ninja_log

@@ -17,7 +17,7 @@
 52	863	7107921062435056	third_party/GLFW/src/CMakeFiles/glfw.dir/vulkan.c.obj	650f0f592dd807bc
 46	1026	7108099929755275	coral_renderer/CMakeFiles/coral_renderer.dir/coral_descriptors.cpp.obj	58c4d364253128d
 37	871	7107921062791811	third_party/GLFW/src/CMakeFiles/glfw.dir/context.c.obj	caf4694f76bba58d
-19	1593	7108991139907554	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
+9	1583	7109045282086382	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
 81	871	7107921062721736	third_party/GLFW/src/CMakeFiles/glfw.dir/egl_context.c.obj	a0bf0e9de6ce9e23
 62	878	7107921062992844	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_joystick.c.obj	f4448c998c46664c
 44	888	7107921063028261	third_party/GLFW/src/CMakeFiles/glfw.dir/input.c.obj	fdab6c055128488
@@ -39,107 +39,51 @@
 23	977	7108887524340920	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	9f39a3ad561683f6
 12	1075	7108887525332091	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	5f8313c86bb83823
 2	16	0	clean	21a4d0550fd2b6b1
-16	1070	7108991134695618	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
+5	1008	7109045276365793	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
 5	977	7108149498029376	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	5053ccbaabbd5e9d
 4	1048	7108891316732977	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_data.cpp.obj	8a7daf6159c2fa53
 40	1660	7108099936096179	coral_renderer/CMakeFiles/coral_renderer.dir/coral_buffer.cpp.obj	77b1cf6059c01a73
 2104	2158	7108887536059401	coral_renderer/coral_renderer.lib	22d45a2543ff0fdf
 33	2863	7107921082822377	third_party/CMakeFiles/tinyobjloader.dir/tinyobjloader/tiny_obj_loader.cc.obj	5d11c9f136fb5987
-1655	2018	7108991142360109	minecraft_clone/minecraft_clone.exe	506eec639b450a47
+1700	2035	7109045285057636	minecraft_clone/minecraft_clone.exe	506eec639b450a47
 16	2104	7108887535570313	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	7f5e366fb42bc0ab
 2651	2699	7107921081207838	third_party/vkbootstrap.lib	70c0e9f308a489de
 2863	2903	7107921083235766	third_party/tinyobjloader.lib	49f56a18b656ab21
-23	1655	7108991140524242	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-11	510	7108150990566898	build.ninja	6cdfad673094e22
-13	947	7108991256846901	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-17	1597	7108991263324831	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-20	1650	7108991263844574	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1650	1986	7108991265611594	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	933	7108992282404909	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-14	1580	7108992288853185	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-17	1624	7108992289286759	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1624	1945	7108992290983460	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	1610	7108994863102852	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1611	1943	7108994864851269	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	940	7108995316926161	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-15	1583	7108995323331868	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-18	1624	7108995323740787	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1624	1950	7108995325476661	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-13	972	7108999171609634	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-16	1605	7108999177925665	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-20	1680	7108999178679632	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1680	2015	7108999180469255	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	1615	7108999341816540	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1616	1947	7108999343574988	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-18	1712	7109002900278263	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1712	2045	7109002902086894	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	1637	7109003401466711	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1637	1971	7109003403228902	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	947	7109003622693096	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-15	1578	7109003628984232	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-18	1645	7109003629656036	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1645	1968	7109003631380935	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-4	1620	7109004246807099	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1620	1958	7109004248617845	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-12	994	7109004325145090	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-16	1675	7109004331938050	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-19	1741	7109004332588196	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1741	2060	7109004334304178	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	1694	7109005710850487	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1694	2016	7109005712585935	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	1623	7109006067117450	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1623	1961	7109006068913840	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	958	7109006364057335	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-15	1594	7109006370403356	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-18	1659	7109006371051824	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1659	1978	7109006372727544	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-5	1615	7109009969428527	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1615	1930	7109009971159973	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	945	7109010060909940	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-14	1590	7109010067338560	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-17	1662	7109010068056210	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1662	1991	7109010069829554	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-13	1628	7109010564260732	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1629	1961	7109010566051268	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-12	1643	7109011197363833	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1643	1975	7109011199100133	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-12	1635	7109011942608930	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1635	1972	7109011944425724	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-12	1643	7109012562327183	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1643	1976	7109012564078226	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-4	1014	7109027346349244	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-7	1599	7109027352179205	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-11	1671	7109027352891360	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1672	2068	7109027354735755	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-5	1706	7109028476820009	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1706	2053	7109028478696168	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-5	1019	7109032159281671	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-9	1595	7109032165012994	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-12	1688	7109032165951044	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1688	2021	7109032167761884	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-13	1690	7109032445303247	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1690	2031	7109032447087208	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-5	1156	7109033089028784	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-8	1761	7109033095063189	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-11	1883	7109033096270565	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1883	2212	7109033098039318	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-12	1973	7109033373934071	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1973	2304	7109033375675502	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-12	1682	7109033492107845	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1682	2015	7109033493842563	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	1707	7109033736614419	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1707	2045	7109033738417549	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-5	1676	7109034490475957	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1677	2011	7109034492251140	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-12	1691	7109036139654284	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1691	2022	7109036141402183	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-5	1618	7109036865508653	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1618	1943	7109036867231226	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-11	1031	7109042900154019	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-15	1591	7109042905740382	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
-18	1726	7109042907085924	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1726	2050	7109042908792323	minecraft_clone/minecraft_clone.exe	506eec639b450a47
-5	1008	7109045276365793	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
-9	1583	7109045282086382	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
 12	1700	7109045283268799	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
-1700	2035	7109045285057636	minecraft_clone/minecraft_clone.exe	506eec639b450a47
+11	510	7109625749919001	build.ninja	6cdfad673094e22
+26	1019	7109625773056711	coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.cpp.obj	68d39b4a661c7765
+44	1070	7109625773568010	coral_renderer/CMakeFiles/coral_renderer.dir/vk_job.cpp.obj	de29ad0ce7d65e17
+42	1215	7109625774999390	coral_renderer/CMakeFiles/coral_renderer.dir/coral_descriptors.cpp.obj	58c4d364253128d
+61	1295	7109625775792285	minecraft_clone/CMakeFiles/minecraft_clone.dir/atlas_generator.cpp.obj	63a7b03febd0c3e3
+39	1337	7109625776210023	coral_renderer/CMakeFiles/coral_renderer.dir/coral_frame_info.cpp.obj	c44799d01941a134
+23	1351	7109625776357483	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	9e9fbf41d3abfc6c
+17	1464	7109625777438950	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	c20c8f0603546fd6
+57	1518	7109625778026500	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_renderer.cpp.obj	ea894ddbb51e986f
+29	1552	7109625778325970	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	9f39a3ad561683f6
+10	1652	7109625779360637	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	5f8313c86bb83823
+32	1706	7109625779884713	coral_renderer/CMakeFiles/coral_renderer.dir/coral_texture.cpp.obj	22d76ed5186f4695
+13	1766	7109625780508504	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	5053ccbaabbd5e9d
+48	1832	7109625781195425	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
+54	1847	7109625781347587	minecraft_clone/CMakeFiles/minecraft_clone.dir/voxel_data.cpp.obj	8a7daf6159c2fa53
+35	1880	7109625781648824	coral_renderer/CMakeFiles/coral_renderer.dir/coral_buffer.cpp.obj	77b1cf6059c01a73
+51	2503	7109625787875210	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
+64	2582	7109625788675883	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
+20	2774	7109625790499189	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	7f5e366fb42bc0ab
+2774	2831	7109625791057591	coral_renderer/coral_renderer.lib	d7c728ab0ac7332
+2831	3197	7109625793217391	minecraft_clone/minecraft_clone.exe	506eec639b450a47
+4	1761	7109626696928196	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
+1761	2096	7109626698718107	minecraft_clone/minecraft_clone.exe	506eec639b450a47
+11	1671	7109626994540193	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
+1672	2003	7109626996272494	minecraft_clone/minecraft_clone.exe	506eec639b450a47
+11	1783	7109627642038644	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
+1783	2134	7109627643857653	minecraft_clone/minecraft_clone.exe	506eec639b450a47
+6	1220	7109630163230930	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
+10	1862	7109630169632974	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
+15	1948	7109630170481842	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
+1948	2279	7109630172281764	minecraft_clone/minecraft_clone.exe	506eec639b450a47
+5	1127	7109637598927906	minecraft_clone/CMakeFiles/minecraft_clone.dir/main.cpp.obj	ca275f79d188cf8f
+8	1602	7109637603679079	minecraft_clone/CMakeFiles/minecraft_clone.dir/first_app.cpp.obj	3a8e8f25ac5a3595
+11	1712	7109637604769325	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
+1712	2038	7109637606522349	minecraft_clone/minecraft_clone.exe	506eec639b450a47
+11	1671	7109640000657269	minecraft_clone/CMakeFiles/minecraft_clone.dir/world_generator.cpp.obj	3c460ce3743f64dd
+1671	1996	7109640002381460	minecraft_clone/minecraft_clone.exe	506eec639b450a47

+ 2 - 2
out/build/x64-Release/Testing/Temporary/LastTest.log

@@ -1,3 +1,3 @@
-Start testing: Jul 11 23:44 Romance Daylight Time
+Start testing: Jul 13 16:42 Romance Daylight Time
 ----------------------------------------------------------
-End testing: Jul 11 23:44 Romance Daylight Time
+End testing: Jul 13 16:42 Romance Daylight Time

+ 9 - 1
out/build/x64-Release/build.ninja

@@ -227,6 +227,14 @@ build coral_renderer\CMakeFiles\coral_renderer.dir\coral_descriptors.cpp.obj: CX
   TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.pdb
   TARGET_PDB = coral_renderer\coral_renderer.pdb
 
+build coral_renderer\CMakeFiles\coral_renderer.dir\vk_job.cpp.obj: CXX_COMPILER__coral_renderer_unscanned_Release E$:\Game$ Development\Visual$ Studio$ Solutions\Coral3D\coral_renderer\vk_job.cpp || cmake_object_order_depends_target_coral_renderer
+  FLAGS = /DWIN32 /D_WINDOWS /EHsc /O2 /Ob2 /DNDEBUG -std:c++latest -MD /W4 /WX /w
+  INCLUDES = -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\GLFW\include" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\glm" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\vkbootstrap" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\tinyobjloader" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\vma" -I"E:\Game Development\Visual Studio Solutions\Coral3D\third_party\stb_image" -external:IC:\VulkanSDK\1.3.250.0\Include -external:W0
+  OBJECT_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  OBJECT_FILE_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.pdb
+  TARGET_PDB = coral_renderer\coral_renderer.pdb
+
 
 # =============================================================================
 # Link build statements for STATIC_LIBRARY target coral_renderer
@@ -235,7 +243,7 @@ build coral_renderer\CMakeFiles\coral_renderer.dir\coral_descriptors.cpp.obj: CX
 #############################################
 # Link the static library coral_renderer\coral_renderer.lib
 
-build coral_renderer\coral_renderer.lib: CXX_STATIC_LIBRARY_LINKER__coral_renderer_Release coral_renderer\CMakeFiles\coral_renderer.dir\coral_window.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_pipeline.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_device.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_initializers.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_swapchain.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_mesh.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\render_system.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_camera.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_utils.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_texture.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_buffer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_frame_info.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_descriptors.cpp.obj || coral_renderer\Shaders third_party\GLFW\src\glfw3.lib third_party\tinyobjloader.lib third_party\vkbootstrap.lib
+build coral_renderer\coral_renderer.lib: CXX_STATIC_LIBRARY_LINKER__coral_renderer_Release coral_renderer\CMakeFiles\coral_renderer.dir\coral_window.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_pipeline.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_device.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_initializers.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_swapchain.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_mesh.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\render_system.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_camera.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_utils.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_texture.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_buffer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_frame_info.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_descriptors.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_job.cpp.obj || coral_renderer\Shaders third_party\GLFW\src\glfw3.lib third_party\tinyobjloader.lib third_party\vkbootstrap.lib
   LANGUAGE_COMPILE_FLAGS = /DWIN32 /D_WINDOWS /EHsc /O2 /Ob2 /DNDEBUG -MD
   LINK_FLAGS = /machine:x64
   OBJECT_DIR = coral_renderer\CMakeFiles\coral_renderer.dir