update xmake vulkansdk

This commit is contained in:
ouczbs 2024-05-22 22:06:12 +08:00
parent f1add7af93
commit 69ba2b0219
8 changed files with 36 additions and 34 deletions

View File

@ -1,7 +1,5 @@
--includes("*/xmake.lua") --includes("*/xmake.lua")
add_requires("gtest") add_requires("gtest")
add_requires("vulkansdk","spirv-tools") add_requires("vulkansdk",{configs = {utils = {"shaderc", "spirv-tools", "glslang", "spirv-cross"}}})
add_requires("glfw") --add_requires("shaderc", "spirv-tools", "glslang", "spirv-cross")
add_requires("shaderc") add_requires("assimp","freetype","glad","glfw","stb")
add_requires("glslang")
add_requires("assimp","freetype","glad","spirv-cross","stb")

View File

@ -30,14 +30,13 @@ vk::UniqueCommandBuffer BeginSingleTimeCBufferCmd(vk::Device device,vk::CommandP
{ {
pool,vk::CommandBufferLevel::ePrimary,1 pool,vk::CommandBufferLevel::ePrimary,1
}; };
vk::DispatchLoaderStatic dispatcher{}; auto cmd_buffers = device.allocateCommandBuffersUnique(alloc_info);
auto cmd_buffers = device.allocateCommandBuffersUnique(alloc_info,dispatcher);
auto cmd_buffer = std::move(cmd_buffers[0]); auto cmd_buffer = std::move(cmd_buffers[0]);
cmd_buffer->reset(vk::CommandBufferResetFlags{}, dispatcher); cmd_buffer->reset(vk::CommandBufferResetFlags{});
//Setup copy command buffer/pool //Setup copy command buffer/pool
vk::CommandBufferBeginInfo beginInfo{ vk::CommandBufferUsageFlagBits::eOneTimeSubmit,info }; vk::CommandBufferBeginInfo beginInfo{ vk::CommandBufferUsageFlagBits::eOneTimeSubmit,info };
//Add the commands //Add the commands
cmd_buffer->begin(beginInfo, dispatcher); cmd_buffer->begin(beginInfo);
return std::move(cmd_buffer); return std::move(cmd_buffer);
} }
@ -127,12 +126,11 @@ void CopyBuffer(vk::CommandBuffer cmd_buffer, vk::Queue queue, vk::Buffer srcBuf
{ {
BeginSingleTimeCBufferCmd(cmd_buffer); BeginSingleTimeCBufferCmd(cmd_buffer);
vk::DispatchLoaderStatic dispatcher{};
vk::BufferCopy copyRegion vk::BufferCopy copyRegion
{ {
0,0,size 0,0,size
}; };
cmd_buffer.copyBuffer(srcBuffer, dstBuffer, copyRegion, dispatcher); cmd_buffer.copyBuffer(srcBuffer, dstBuffer, copyRegion);
EndSingleTimeCbufferCmd(cmd_buffer, queue, {}, {}, {}, fence,wait_idle); EndSingleTimeCbufferCmd(cmd_buffer, queue, {}, {}, {}, fence,wait_idle);
} }

View File

@ -16,13 +16,13 @@ namespace idk::vkn::hlp
,usage ,usage
,vk::SharingMode::eExclusive //Exclusive to the graphics queue family ,vk::SharingMode::eExclusive //Exclusive to the graphics queue family
}; };
return device.createBufferUnique(bufferInfo, nullptr, dispatcher); return device.createBufferUnique(bufferInfo, nullptr);
} }
template<typename T, typename Dispatcher> template<typename T, typename Dispatcher>
vk::UniqueBuffer CreateVertexBuffer(vk::Device device, T* const begin, T* const end, const Dispatcher& dispatcher) 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<typename T, typename Dispatcher> template<typename T, typename Dispatcher>
vk::UniqueBuffer CreateVertexBuffer(vk::Device device, std::vector<T> const& vertices, const Dispatcher& dispatcher) vk::UniqueBuffer CreateVertexBuffer(vk::Device device, std::vector<T> 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<typename Dispatcher> template<typename Dispatcher>
vk::UniqueDeviceMemory AllocateBuffer( vk::UniqueDeviceMemory AllocateBuffer(
vk::PhysicalDevice pdevice, vk::Device device, vk::Buffer const& buffer, vk::MemoryPropertyFlags memory_flags, Dispatcher const& dispatcher) 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 vk::MemoryAllocateInfo allocInfo
{ {
Track(req.size) Track(req.size)
,findMemoryType(pdevice,req.memoryTypeBits, memory_flags) ,findMemoryType(pdevice,req.memoryTypeBits, memory_flags)
}; };
return device.allocateMemoryUnique(allocInfo, nullptr, dispatcher); return device.allocateMemoryUnique(allocInfo, nullptr);
} }
template<typename Dispatcher> template<typename Dispatcher>
void BindBufferMemory(vk::Device device, vk::Buffer buffer, vk::DeviceMemory memory, uint32_t offset, Dispatcher const& dispatcher) 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<typename Dispatcher> template<typename Dispatcher>
std::pair<vk::UniqueBuffer, vk::UniqueDeviceMemory> CreateAllocBindBuffer( std::pair<vk::UniqueBuffer, vk::UniqueDeviceMemory> CreateAllocBindBuffer(
@ -61,9 +61,9 @@ namespace idk::vkn::hlp
const Dispatcher& dispatcher const Dispatcher& dispatcher
) )
{ {
auto buffer = CreateBuffer(device, buffer_size, buffer_usage, dispatcher); auto buffer = CreateBuffer(device, buffer_size, buffer_usage);
auto memory = AllocateBuffer(pdevice, device, *buffer, memory_flags, dispatcher); auto memory = AllocateBuffer(pdevice, device, *buffer, memory_flags);
BindBufferMemory(device, *buffer, *memory, 0, dispatcher); BindBufferMemory(device, *buffer, *memory, 0);
return std::make_pair(std::move(buffer), std::move(memory)); return std::make_pair(std::move(buffer), std::move(memory));
} }
template<typename Dispatcher> template<typename Dispatcher>
@ -76,9 +76,9 @@ namespace idk::vkn::hlp
const Dispatcher& dispatcher 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); auto memory = allocator.Allocate(pdevice, device, *buffer, memory_flags);
BindBufferMemory(device, *buffer, memory->Memory(), s_cast<uint32_t>(memory->Offset()), dispatcher); BindBufferMemory(device, *buffer, memory->Memory(), s_cast<uint32_t>(memory->Offset()));
return std::make_pair(std::move(buffer), std::move(memory)); return std::make_pair(std::move(buffer), std::move(memory));
} }
template<typename T, typename Dispatcher> template<typename T, typename Dispatcher>
@ -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<typename T, typename Dispatcher> template<typename T, typename Dispatcher>
std::pair<vk::UniqueBuffer, vk::UniqueDeviceMemory> CreateAllocBindVertexBuffer( std::pair<vk::UniqueBuffer, vk::UniqueDeviceMemory> CreateAllocBindVertexBuffer(
vk::PhysicalDevice pdevice, vk::Device device, std::vector<T> const& vertices, const Dispatcher& dispatcher vk::PhysicalDevice pdevice, vk::Device device, std::vector<T> 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<typename T, typename Dispatcher> template<typename T, typename Dispatcher>
@ -106,7 +106,7 @@ namespace idk::vkn::hlp
,dest_offset ,dest_offset
,trf_size ,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); memcpy_s(handle, mmr.size, src_start, mmr.size);
//std::vector<decltype(mmr)> memory_ranges //std::vector<decltype(mmr)> memory_ranges
//{ //{

View File

@ -185,6 +185,11 @@ namespace idk::vkn
ubo_info[ub.name] = std::move(info); 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) //for (auto& ub : cs)
//{ //{

View File

@ -25,7 +25,7 @@ namespace idk::vkn
,cmd_level ,cmd_level
,1 ,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]); return std::move(cmd_buffers[0]);
} }
struct StagingStuff struct StagingStuff
@ -33,23 +33,25 @@ namespace idk::vkn
vk::UniqueCommandBuffer cmd_buffer; vk::UniqueCommandBuffer cmd_buffer;
vk::UniqueBuffer buffer; vk::UniqueBuffer buffer;
vk::UniqueDeviceMemory memory; vk::UniqueDeviceMemory memory;
~StagingStuff() {
}
}; };
//Expensive (probably). //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) 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 tmp_cmd_buffer = hlp::CreateCommandBuffer(cmd_pool, device);
auto dispatcher = vk::DispatchLoaderStatic{};
vk::DeviceSize bufferSize = num_bytes; vk::DeviceSize bufferSize = num_bytes;
auto [stagingBuffer, stagingBufferMemory] = hlp::CreateAllocBindBuffer( auto [stagingBuffer, stagingBufferMemory] = hlp::CreateAllocBindBuffer(
pdevice, device, bufferSize, pdevice, device, bufferSize,
vk::BufferUsageFlagBits::eTransferSrc, vk::BufferUsageFlagBits::eTransferSrc,
vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
dispatcher);
{ {
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_buffers.emplace_back( std::move(instance_buffer));
//m_vertex_memories.emplace_back(std::move(instance_memory)); //m_vertex_memories.emplace_back(std::move(instance_memory));

View File

@ -455,7 +455,7 @@ namespace idk::vkn
//m_device.~UniqueHandle(); //m_device.~UniqueHandle();
m_device = vk::UniqueDevice{ pdevice.createDevice(createInfo, nullptr, dispatcher) }; m_device = vk::UniqueDevice{ pdevice.createDevice(createInfo, nullptr, dispatcher) };
m_graphics_queue = m_device->getQueue(*m_queue_family.graphics_family, 0, 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_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); //m_transfer_queue = m_device->getQueue(*m_queue_family.transfer_family, 0, dispatcher);
} }
@ -823,7 +823,6 @@ namespace idk::vkn
device->resetFences(*imageFence); device->resetFences(*imageFence);
hlp::EndSingleTimeCbufferCmd(cmd_buffer, view_->GraphicsQueue(), false, *imageFence); hlp::EndSingleTimeCbufferCmd(cmd_buffer, view_->GraphicsQueue(), false, *imageFence);
ucmd_buffer.release();
uint64_t wait_for_milli_seconds = 1; uint64_t wait_for_milli_seconds = 1;
uint64_t wait_for_micro_seconds = wait_for_milli_seconds * 1000; uint64_t wait_for_micro_seconds = wait_for_milli_seconds * 1000;
[[maybe_unused]] uint64_t wait_for_nano_seconds = wait_for_micro_seconds * 1000; [[maybe_unused]] uint64_t wait_for_nano_seconds = wait_for_micro_seconds * 1000;

View File

@ -67,7 +67,7 @@ target("opengl")
target("vkn") target("vkn")
set_kind("static") set_kind("static")
add_deps("idk","win32") 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_includedirs("engine", "engine/vkn", {public = true})
add_files("engine/vkn/*.cpp","engine/vkn/**.cpp") add_files("engine/vkn/*.cpp","engine/vkn/**.cpp")
add_headerfiles("engine/vkn/*.h","engine/vkn/**.h") add_headerfiles("engine/vkn/*.h","engine/vkn/**.h")

View File

@ -2,12 +2,12 @@ add_rules("mode.debug", "mode.release")
--set_arch("x64") --set_arch("x64")
set_languages("cxx20") set_languages("cxx20")
set_project("idk") set_project("idk")
set_config("vs_toolset", "14.2")
-- 设置 Visual Studio 版本为 2019 -- 设置 Visual Studio 版本为 2019
set_toolchains("msvc") set_toolchains("msvc")
-- 添加 /bigobj 编译选项 -- 添加 /bigobj 编译选项
add_cxflags("/bigobj") add_cxflags("/bigobj")
includes("src/xmake.lua") includes("src/xmake.lua")
--__std_find_trivial_1 msvc 版本不一致会有这个报错 --__std_find_trivial_1 msvc 版本不一致会有这个报错
--xmake f --vs_toolset=14.3 -c
--xmake project -k vsxmake2022 -a x64 --xmake project -k vsxmake2022 -a x64
--xmake project -k vsxmake2022 -m "debug;release" --xmake project -k vsxmake2022 -m "debug;release"