mirror of
https://github.com/seekrs/MacroLibX.git
synced 2026-01-15 08:33:33 +00:00
Compare commits
9 Commits
152-add-py
...
v2.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7bc48eb70 | ||
|
|
cfb9affde5 | ||
|
|
db236fd2b5 | ||
|
|
3b133e08b6 | ||
|
|
3244bd3b30 | ||
|
|
e5826b8a78 | ||
|
|
c7c60c240a | ||
|
|
2ce5fdeb66 | ||
|
|
4ea92d825a |
2
.github/workflows/greetings.yml
vendored
2
.github/workflows/greetings.yml
vendored
@@ -9,7 +9,7 @@ jobs:
|
|||||||
issues: write
|
issues: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/first-interaction@v1
|
- uses: actions/first-interaction@v2
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
issue-message: |
|
issue-message: |
|
||||||
|
|||||||
6
Makefile
6
Makefile
@@ -38,6 +38,9 @@ GCH = runtime/Includes/PreCompiled.h.gch
|
|||||||
CCH = runtime/Includes/PreCompiled.h.pch
|
CCH = runtime/Includes/PreCompiled.h.pch
|
||||||
PCH =
|
PCH =
|
||||||
|
|
||||||
|
# Personal path, should be overriden with env var
|
||||||
|
UNIT_TESTS_PATH = ../UnitTester/build/Bin/linux_x86_64/MacroUnitTest
|
||||||
|
|
||||||
NZSLC ?= nzslc
|
NZSLC ?= nzslc
|
||||||
|
|
||||||
ifeq ($(TOOLCHAIN), gcc)
|
ifeq ($(TOOLCHAIN), gcc)
|
||||||
@@ -161,6 +164,9 @@ clean-shaders:
|
|||||||
|
|
||||||
shaders: clean-shaders $(SPVS)
|
shaders: clean-shaders $(SPVS)
|
||||||
|
|
||||||
|
tests: debug
|
||||||
|
@$(UNIT_TESTS_PATH) --headless --path="./$(NAME)"
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@$(RM) $(OBJ_DIR)
|
@$(RM) $(OBJ_DIR)
|
||||||
@printf "Cleaned $(_BOLD)$(OBJ_DIR)$(_RESET)\n"
|
@printf "Cleaned $(_BOLD)$(OBJ_DIR)$(_RESET)\n"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
|
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/11/10 08:49:17 by maldavid #+# #+# */
|
/* Created: 2023/11/10 08:49:17 by maldavid #+# #+# */
|
||||||
/* Updated: 2025/03/12 22:01:07 by maldavid ### ########.fr */
|
/* Updated: 2025/10/22 13:38:43 by maldavid ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@@ -206,7 +206,7 @@
|
|||||||
|
|
||||||
typedef void (*mlx_function)(void);
|
typedef void (*mlx_function)(void);
|
||||||
|
|
||||||
#define MLX_VERSION MLX_MAKE_VERSION(2, 0, 0)
|
#define MLX_VERSION MLX_MAKE_VERSION(2, 2, 0)
|
||||||
#define MLX_TARGET_VULKAN_API_VERSION MLX_MAKE_VERSION(1, 0, 0)
|
#define MLX_TARGET_VULKAN_API_VERSION MLX_MAKE_VERSION(1, 0, 0)
|
||||||
|
|
||||||
// Checking common assumptions
|
// Checking common assumptions
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ namespace mlx
|
|||||||
~DescriptorPoolManager() = default;
|
~DescriptorPoolManager() = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<DescriptorPool> m_pools;
|
std::vector<std::unique_ptr<DescriptorPool>> m_pools;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DescriptorSet : public std::enable_shared_from_this<DescriptorSet>
|
class DescriptorSet : public std::enable_shared_from_this<DescriptorSet>
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ namespace mlx
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Swapchain m_swapchain;
|
Swapchain m_swapchain;
|
||||||
|
std::vector<VkSemaphore> m_render_finished_semaphores;
|
||||||
std::array<VkSemaphore, MAX_FRAMES_IN_FLIGHT> m_image_available_semaphores;
|
std::array<VkSemaphore, MAX_FRAMES_IN_FLIGHT> m_image_available_semaphores;
|
||||||
std::array<VkSemaphore, MAX_FRAMES_IN_FLIGHT> m_render_finished_semaphores;
|
|
||||||
std::array<VkCommandBuffer, MAX_FRAMES_IN_FLIGHT> m_cmd_buffers;
|
std::array<VkCommandBuffer, MAX_FRAMES_IN_FLIGHT> m_cmd_buffers;
|
||||||
std::array<VkFence, MAX_FRAMES_IN_FLIGHT> m_cmd_fences;
|
std::array<VkFence, MAX_FRAMES_IN_FLIGHT> m_cmd_fences;
|
||||||
NonOwningPtr<Window> p_window;
|
NonOwningPtr<Window> p_window;
|
||||||
|
|||||||
@@ -114,11 +114,8 @@ namespace mlx
|
|||||||
|
|
||||||
void DescriptorPool::ReturnDescriptorSet(std::shared_ptr<DescriptorSet> set)
|
void DescriptorPool::ReturnDescriptorSet(std::shared_ptr<DescriptorSet> set)
|
||||||
{
|
{
|
||||||
//std::size_t i = 0;
|
|
||||||
auto it = std::find_if(m_used_sets.begin(), m_used_sets.end(), [&](const std::shared_ptr<DescriptorSet>& rhs_set)
|
auto it = std::find_if(m_used_sets.begin(), m_used_sets.end(), [&](const std::shared_ptr<DescriptorSet>& rhs_set)
|
||||||
{
|
{
|
||||||
//i++;
|
|
||||||
//std::cout << m_used_sets.size() << " " << i << std::endl;
|
|
||||||
return set == rhs_set;
|
return set == rhs_set;
|
||||||
});
|
});
|
||||||
if(it == m_used_sets.end())
|
if(it == m_used_sets.end())
|
||||||
@@ -132,18 +129,18 @@ namespace mlx
|
|||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
for(auto& pool : m_pools)
|
for(auto& pool : m_pools)
|
||||||
{
|
{
|
||||||
if(pool.GetNumberOfSetsAllocated() < MAX_SETS_PER_POOL)
|
if(pool->GetNumberOfSetsAllocated() < MAX_SETS_PER_POOL)
|
||||||
return pool;
|
return *pool;
|
||||||
}
|
}
|
||||||
m_pools.emplace_back().Init();
|
m_pools.emplace_back(std::make_unique<DescriptorPool>())->Init();
|
||||||
return m_pools.back();
|
return *m_pools.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DescriptorPoolManager::Destroy()
|
void DescriptorPoolManager::Destroy()
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
for(auto& pool : m_pools)
|
for(auto& pool : m_pools)
|
||||||
pool.Destroy();
|
pool->Destroy();
|
||||||
m_pools.clear();
|
m_pools.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,29 +20,42 @@ namespace mlx
|
|||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
p_window = window;
|
p_window = window;
|
||||||
m_swapchain.Init(p_window);
|
m_swapchain.Init(p_window);
|
||||||
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
Init(NonOwningPtr<Texture>{ nullptr });
|
||||||
{
|
|
||||||
m_image_available_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
|
||||||
DebugLog("Vulkan: image available semaphore created");
|
|
||||||
m_render_finished_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
|
||||||
DebugLog("Vulkan: render finished semaphore created");
|
|
||||||
m_cmd_buffers[i] = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
|
||||||
DebugLog("Vulkan: command buffer created");
|
|
||||||
m_cmd_fences[i] = kvfCreateFence(RenderCore::Get().GetDevice());
|
|
||||||
DebugLog("Vulkan: fence created");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::Init(NonOwningPtr<Texture> render_target)
|
void Renderer::Init(NonOwningPtr<Texture> render_target)
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
p_render_target = render_target;
|
std::function<void(const EventBase&)> functor = [this](const EventBase& event)
|
||||||
|
{
|
||||||
|
if(event.What() == Event::ResizeEventCode)
|
||||||
|
{
|
||||||
|
for(std::size_t i = 0; i < m_render_finished_semaphores.size(); i++)
|
||||||
|
{
|
||||||
|
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_render_finished_semaphores[i]);
|
||||||
|
DebugLog("Vulkan: render finished semaphore destroyed");
|
||||||
|
}
|
||||||
|
m_render_finished_semaphores.clear();
|
||||||
|
for(std::size_t i = 0; i < (p_window ? m_swapchain.GetImagesCount() : 1); i++)
|
||||||
|
{
|
||||||
|
m_render_finished_semaphores.push_back(kvfCreateSemaphore(RenderCore::Get().GetDevice()));
|
||||||
|
DebugLog("Vulkan: render finished semaphore created");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
EventBus::RegisterListener({ functor, "mlx_renderer_" + std::to_string(reinterpret_cast<std::uintptr_t>(this)) });
|
||||||
|
|
||||||
|
if(render_target)
|
||||||
|
p_render_target = render_target;
|
||||||
|
for(std::size_t i = 0; i < (p_window ? m_swapchain.GetImagesCount() : 1); i++)
|
||||||
|
{
|
||||||
|
m_render_finished_semaphores.push_back(kvfCreateSemaphore(RenderCore::Get().GetDevice()));
|
||||||
|
DebugLog("Vulkan: render finished semaphore created");
|
||||||
|
}
|
||||||
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
||||||
{
|
{
|
||||||
m_image_available_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
m_image_available_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
||||||
DebugLog("Vulkan: image available semaphore created");
|
DebugLog("Vulkan: image available semaphore created");
|
||||||
m_render_finished_semaphores[i] = kvfCreateSemaphore(RenderCore::Get().GetDevice());
|
|
||||||
DebugLog("Vulkan: render finished semaphore created");
|
|
||||||
m_cmd_buffers[i] = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
m_cmd_buffers[i] = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
|
||||||
DebugLog("Vulkan: command buffer created");
|
DebugLog("Vulkan: command buffer created");
|
||||||
m_cmd_fences[i] = kvfCreateFence(RenderCore::Get().GetDevice());
|
m_cmd_fences[i] = kvfCreateFence(RenderCore::Get().GetDevice());
|
||||||
@@ -66,14 +79,15 @@ namespace mlx
|
|||||||
void Renderer::EndFrame()
|
void Renderer::EndFrame()
|
||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
|
std::size_t render_finished_index = (p_window ? m_swapchain.GetImageIndex() : 0);
|
||||||
VkPipelineStageFlags wait_stages[] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT };
|
VkPipelineStageFlags wait_stages[] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT };
|
||||||
kvfEndCommandBuffer(m_cmd_buffers[m_current_frame_index]);
|
kvfEndCommandBuffer(m_cmd_buffers[m_current_frame_index]);
|
||||||
if(p_window)
|
if(p_window)
|
||||||
kvfSubmitCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[m_current_frame_index], KVF_GRAPHICS_QUEUE, m_render_finished_semaphores[m_current_frame_index], m_image_available_semaphores[m_current_frame_index], m_cmd_fences[m_current_frame_index], wait_stages);
|
kvfSubmitCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[m_current_frame_index], KVF_GRAPHICS_QUEUE, m_render_finished_semaphores[render_finished_index], m_image_available_semaphores[m_current_frame_index], m_cmd_fences[m_current_frame_index], wait_stages);
|
||||||
else
|
else
|
||||||
kvfSubmitCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[m_current_frame_index], KVF_GRAPHICS_QUEUE, VK_NULL_HANDLE, VK_NULL_HANDLE, m_cmd_fences[m_current_frame_index], wait_stages);
|
kvfSubmitCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[m_current_frame_index], KVF_GRAPHICS_QUEUE, VK_NULL_HANDLE, VK_NULL_HANDLE, m_cmd_fences[m_current_frame_index], wait_stages);
|
||||||
if(p_window)
|
if(p_window)
|
||||||
m_swapchain.Present(m_render_finished_semaphores[m_current_frame_index]);
|
m_swapchain.Present(m_render_finished_semaphores[render_finished_index]);
|
||||||
m_current_frame_index = (m_current_frame_index + 1) % MAX_FRAMES_IN_FLIGHT;
|
m_current_frame_index = (m_current_frame_index + 1) % MAX_FRAMES_IN_FLIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,12 +95,16 @@ namespace mlx
|
|||||||
{
|
{
|
||||||
MLX_PROFILE_FUNCTION();
|
MLX_PROFILE_FUNCTION();
|
||||||
RenderCore::Get().WaitDeviceIdle();
|
RenderCore::Get().WaitDeviceIdle();
|
||||||
|
for(std::size_t i = 0; i < m_render_finished_semaphores.size(); i++)
|
||||||
|
{
|
||||||
|
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_render_finished_semaphores[i]);
|
||||||
|
DebugLog("Vulkan: render finished semaphore destroyed");
|
||||||
|
}
|
||||||
|
m_render_finished_semaphores.clear();
|
||||||
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
for(std::size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
||||||
{
|
{
|
||||||
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_image_available_semaphores[i]);
|
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_image_available_semaphores[i]);
|
||||||
DebugLog("Vulkan: image available semaphore destroyed");
|
DebugLog("Vulkan: image available semaphore destroyed");
|
||||||
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_render_finished_semaphores[i]);
|
|
||||||
DebugLog("Vulkan: render finished semaphore destroyed");
|
|
||||||
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[i]);
|
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[i]);
|
||||||
DebugLog("Vulkan: command buffer destroyed");
|
DebugLog("Vulkan: command buffer destroyed");
|
||||||
kvfDestroyFence(RenderCore::Get().GetDevice(), m_cmd_fences[i]);
|
kvfDestroyFence(RenderCore::Get().GetDevice(), m_cmd_fences[i]);
|
||||||
|
|||||||
Reference in New Issue
Block a user