diff --git a/src/3rdparty/xmake.lua b/src/3rdparty/xmake.lua index 2e13d04..ea2f3fa 100644 --- a/src/3rdparty/xmake.lua +++ b/src/3rdparty/xmake.lua @@ -1,7 +1,5 @@ --includes("*/xmake.lua") add_requires("gtest") -add_requires("vulkansdk","spirv-tools") -add_requires("glfw") -add_requires("shaderc") -add_requires("glslang") -add_requires("assimp","freetype","glad","spirv-cross","stb") \ No newline at end of file +add_requires("vulkansdk",{configs = {utils = {"shaderc", "spirv-tools", "glslang", "spirv-cross"}}}) +--add_requires("shaderc", "spirv-tools", "glslang", "spirv-cross") +add_requires("assimp","freetype","glad","glfw","stb") \ No newline at end of file diff --git a/src/engine/vkn/BufferHelpers.cpp b/src/engine/vkn/BufferHelpers.cpp index 784697c..f3e8c80 100644 --- a/src/engine/vkn/BufferHelpers.cpp +++ b/src/engine/vkn/BufferHelpers.cpp @@ -30,14 +30,13 @@ vk::UniqueCommandBuffer BeginSingleTimeCBufferCmd(vk::Device device,vk::CommandP { pool,vk::CommandBufferLevel::ePrimary,1 }; - vk::DispatchLoaderStatic dispatcher{}; - auto cmd_buffers = device.allocateCommandBuffersUnique(alloc_info,dispatcher); + auto cmd_buffers = device.allocateCommandBuffersUnique(alloc_info); auto cmd_buffer = std::move(cmd_buffers[0]); - cmd_buffer->reset(vk::CommandBufferResetFlags{}, dispatcher); + cmd_buffer->reset(vk::CommandBufferResetFlags{}); //Setup copy command buffer/pool vk::CommandBufferBeginInfo beginInfo{ vk::CommandBufferUsageFlagBits::eOneTimeSubmit,info }; //Add the commands - cmd_buffer->begin(beginInfo, dispatcher); + cmd_buffer->begin(beginInfo); return std::move(cmd_buffer); } @@ -127,12 +126,11 @@ void CopyBuffer(vk::CommandBuffer cmd_buffer, vk::Queue queue, vk::Buffer srcBuf { BeginSingleTimeCBufferCmd(cmd_buffer); - vk::DispatchLoaderStatic dispatcher{}; vk::BufferCopy copyRegion { 0,0,size }; - cmd_buffer.copyBuffer(srcBuffer, dstBuffer, copyRegion, dispatcher); + cmd_buffer.copyBuffer(srcBuffer, dstBuffer, copyRegion); EndSingleTimeCbufferCmd(cmd_buffer, queue, {}, {}, {}, fence,wait_idle); } diff --git a/src/engine/vkn/BufferHelpers.inl b/src/engine/vkn/BufferHelpers.inl index fc0afbb..2c14acc 100644 --- a/src/engine/vkn/BufferHelpers.inl +++ b/src/engine/vkn/BufferHelpers.inl @@ -16,13 +16,13 @@ namespace idk::vkn::hlp ,usage ,vk::SharingMode::eExclusive //Exclusive to the graphics queue family }; - return device.createBufferUnique(bufferInfo, nullptr, dispatcher); + return device.createBufferUnique(bufferInfo, nullptr); } template vk::UniqueBuffer CreateVertexBuffer(vk::Device device, T* const begin, T* const end, const Dispatcher& dispatcher) { - return CreateBuffer(device, buffer_size(begin, end), vk::BufferUsageFlagBits::eVertexBuffer, dispatcher); + return CreateBuffer(device, buffer_size(begin, end), vk::BufferUsageFlagBits::eVertexBuffer); } @@ -30,27 +30,27 @@ namespace idk::vkn::hlp template vk::UniqueBuffer CreateVertexBuffer(vk::Device device, std::vector const& vertices, const Dispatcher& dispatcher) { - return CreateVertexBuffer(device, vertices.data(), vertices.data() + vertices.size(), dispatcher); + return CreateVertexBuffer(device, vertices.data(), vertices.data() + vertices.size()); } // template vk::UniqueDeviceMemory AllocateBuffer( vk::PhysicalDevice pdevice, vk::Device device, vk::Buffer const& buffer, vk::MemoryPropertyFlags memory_flags, Dispatcher const& dispatcher) { - vk::MemoryRequirements req = device.getBufferMemoryRequirements(buffer, dispatcher); + vk::MemoryRequirements req = device.getBufferMemoryRequirements(buffer); vk::MemoryAllocateInfo allocInfo { Track(req.size) ,findMemoryType(pdevice,req.memoryTypeBits, memory_flags) }; - return device.allocateMemoryUnique(allocInfo, nullptr, dispatcher); + return device.allocateMemoryUnique(allocInfo, nullptr); } template void BindBufferMemory(vk::Device device, vk::Buffer buffer, vk::DeviceMemory memory, uint32_t offset, Dispatcher const& dispatcher) { - device.bindBufferMemory(buffer, memory, offset, dispatcher); + device.bindBufferMemory(buffer, memory, offset); } template std::pair CreateAllocBindBuffer( @@ -61,9 +61,9 @@ namespace idk::vkn::hlp const Dispatcher& dispatcher ) { - auto buffer = CreateBuffer(device, buffer_size, buffer_usage, dispatcher); - auto memory = AllocateBuffer(pdevice, device, *buffer, memory_flags, dispatcher); - BindBufferMemory(device, *buffer, *memory, 0, dispatcher); + auto buffer = CreateBuffer(device, buffer_size, buffer_usage); + auto memory = AllocateBuffer(pdevice, device, *buffer, memory_flags); + BindBufferMemory(device, *buffer, *memory, 0); return std::make_pair(std::move(buffer), std::move(memory)); } template @@ -76,9 +76,9 @@ namespace idk::vkn::hlp const Dispatcher& dispatcher ) { - auto buffer = CreateBuffer(device, buffer_size, buffer_usage, dispatcher); + auto buffer = CreateBuffer(device, buffer_size, buffer_usage); auto memory = allocator.Allocate(pdevice, device, *buffer, memory_flags); - BindBufferMemory(device, *buffer, memory->Memory(), s_cast(memory->Offset()), dispatcher); + BindBufferMemory(device, *buffer, memory->Memory(), s_cast(memory->Offset())); return std::make_pair(std::move(buffer), std::move(memory)); } template @@ -87,14 +87,14 @@ namespace idk::vkn::hlp ) { - return CreateAllocBindBuffer(pdevice, device, buffer_size(vertices, vertices_end), vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, dispatcher); + return CreateAllocBindBuffer(pdevice, device, buffer_size(vertices, vertices_end), vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); } template std::pair CreateAllocBindVertexBuffer( vk::PhysicalDevice pdevice, vk::Device device, std::vector const& vertices, const Dispatcher& dispatcher ) { - return CreateAllocBindVertexBuffer(pdevice, device, vertices.data(), vertices.data() + vertices.size(), dispatcher); + return CreateAllocBindVertexBuffer(pdevice, device, vertices.data(), vertices.data() + vertices.size()); } template @@ -106,7 +106,7 @@ namespace idk::vkn::hlp ,dest_offset ,trf_size }; - auto handle = device.mapMemory(memory, mmr.offset, mmr.size, vk::MemoryMapFlags{}, dispatcher); + auto handle = device.mapMemory(memory, mmr.offset, mmr.size, vk::MemoryMapFlags{}); memcpy_s(handle, mmr.size, src_start, mmr.size); //std::vector memory_ranges //{ diff --git a/src/engine/vkn/ShaderModule.cpp b/src/engine/vkn/ShaderModule.cpp index f825546..f321e5c 100644 --- a/src/engine/vkn/ShaderModule.cpp +++ b/src/engine/vkn/ShaderModule.cpp @@ -185,6 +185,11 @@ namespace idk::vkn ubo_info[ub.name] = std::move(info); } + //这里反序列化的数据是错误的,不能执行析构函数 + using SVBuiltResource = decltype(resources.builtin_inputs); + char data[sizeof(SVBuiltResource)]; + std::construct_at((SVBuiltResource*)&data, std::move(resources.builtin_outputs)); + std::construct_at((SVBuiltResource*)&data, std::move(resources.builtin_inputs)); //for (auto& ub : cs) //{ diff --git a/src/engine/vkn/VknMeshModder.cpp b/src/engine/vkn/VknMeshModder.cpp index d41ba4b..52c2cb8 100644 --- a/src/engine/vkn/VknMeshModder.cpp +++ b/src/engine/vkn/VknMeshModder.cpp @@ -25,7 +25,7 @@ namespace idk::vkn ,cmd_level ,1 }; - auto cmd_buffers = device.allocateCommandBuffersUnique(rs_alloc_info, vk::DispatchLoaderStatic{}); + auto cmd_buffers = device.allocateCommandBuffersUnique(rs_alloc_info); return std::move(cmd_buffers[0]); } struct StagingStuff @@ -33,23 +33,25 @@ namespace idk::vkn vk::UniqueCommandBuffer cmd_buffer; vk::UniqueBuffer buffer; vk::UniqueDeviceMemory memory; + + ~StagingStuff() { + + } }; //Expensive (probably). StagingStuff TransferData(vk::CommandPool cmd_pool, vk::Queue queue, vk::PhysicalDevice pdevice, vk::Device device, size_t dst_offset, size_t num_bytes, const void* data, vk::Buffer dst_buffer, vk::Fence fence) { auto tmp_cmd_buffer = hlp::CreateCommandBuffer(cmd_pool, device); - auto dispatcher = vk::DispatchLoaderStatic{}; vk::DeviceSize bufferSize = num_bytes; auto [stagingBuffer, stagingBufferMemory] = hlp::CreateAllocBindBuffer( pdevice, device, bufferSize, vk::BufferUsageFlagBits::eTransferSrc, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, - dispatcher); + vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); { - hlp::MapMemory(device, *stagingBufferMemory, dst_offset, data, bufferSize, dispatcher); + hlp::MapMemory(device, *stagingBufferMemory, dst_offset, data, bufferSize); } //m_vertex_buffers.emplace_back( std::move(instance_buffer)); //m_vertex_memories.emplace_back(std::move(instance_memory)); diff --git a/src/engine/vkn/VulkanState.cpp b/src/engine/vkn/VulkanState.cpp index 76ed772..a805a20 100644 --- a/src/engine/vkn/VulkanState.cpp +++ b/src/engine/vkn/VulkanState.cpp @@ -455,7 +455,7 @@ namespace idk::vkn //m_device.~UniqueHandle(); m_device = vk::UniqueDevice{ pdevice.createDevice(createInfo, nullptr, dispatcher) }; m_graphics_queue = m_device->getQueue(*m_queue_family.graphics_family, 0, dispatcher); - m_graphics_tex_queue = m_device->getQueue(*m_queue_family.graphics_family, 1, dispatcher); + m_graphics_tex_queue = m_graphics_queue; m_present_queue = m_device->getQueue(*m_queue_family.present_family, 0, dispatcher); //m_transfer_queue = m_device->getQueue(*m_queue_family.transfer_family, 0, dispatcher); } @@ -823,7 +823,6 @@ namespace idk::vkn device->resetFences(*imageFence); hlp::EndSingleTimeCbufferCmd(cmd_buffer, view_->GraphicsQueue(), false, *imageFence); - ucmd_buffer.release(); uint64_t wait_for_milli_seconds = 1; uint64_t wait_for_micro_seconds = wait_for_milli_seconds * 1000; [[maybe_unused]] uint64_t wait_for_nano_seconds = wait_for_micro_seconds * 1000; diff --git a/src/xmake.lua b/src/xmake.lua index b983437..cbbea2d 100644 --- a/src/xmake.lua +++ b/src/xmake.lua @@ -67,7 +67,7 @@ target("opengl") target("vkn") set_kind("static") add_deps("idk","win32") - add_packages("vulkansdk","stb", "glslang","shaderc","spirv-cross", {public = true}) + add_packages("vulkansdk","stb", {public = true}) add_includedirs("engine", "engine/vkn", {public = true}) add_files("engine/vkn/*.cpp","engine/vkn/**.cpp") add_headerfiles("engine/vkn/*.h","engine/vkn/**.h") diff --git a/xmake.lua b/xmake.lua index e12d277..e164bb7 100644 --- a/xmake.lua +++ b/xmake.lua @@ -2,12 +2,12 @@ add_rules("mode.debug", "mode.release") --set_arch("x64") set_languages("cxx20") set_project("idk") +set_config("vs_toolset", "14.2") -- 设置 Visual Studio 版本为 2019 set_toolchains("msvc") -- 添加 /bigobj 编译选项 add_cxflags("/bigobj") includes("src/xmake.lua") --__std_find_trivial_1 msvc 版本不一致会有这个报错 ---xmake f --vs_toolset=14.3 -c --xmake project -k vsxmake2022 -a x64 --xmake project -k vsxmake2022 -m "debug;release" \ No newline at end of file