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")
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")
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")

View File

@ -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);
}

View File

@ -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<typename T, typename 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>
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>
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<typename 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>
std::pair<vk::UniqueBuffer, vk::UniqueDeviceMemory> 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<typename Dispatcher>
@ -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<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));
}
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>
std::pair<vk::UniqueBuffer, vk::UniqueDeviceMemory> CreateAllocBindVertexBuffer(
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>
@ -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<decltype(mmr)> memory_ranges
//{

View File

@ -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)
//{

View File

@ -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));

View File

@ -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;

View File

@ -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")

View File

@ -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"