update xmake vulkansdk
This commit is contained in:
parent
f1add7af93
commit
69ba2b0219
8
src/3rdparty/xmake.lua
vendored
8
src/3rdparty/xmake.lua
vendored
@ -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")
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
//{
|
||||
|
||||
@ -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)
|
||||
//{
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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"
|
||||
Loading…
Reference in New Issue
Block a user