diff --git a/aster/include/aster/CMakeLists.txt b/aster/include/aster/CMakeLists.txt index 928e8f0..0a05991 100644 --- a/aster/include/aster/CMakeLists.txt +++ b/aster/include/aster/CMakeLists.txt @@ -7,6 +7,6 @@ add_subdirectory("systems") add_subdirectory("util") target_sources(aster_core - PUBLIC "aster.h") + PUBLIC "aster.h" "import_types.h") target_precompile_headers(aster_core PUBLIC "aster.h") \ No newline at end of file diff --git a/aster/include/aster/aster.h b/aster/include/aster/aster.h index ce6284a..6217696 100644 --- a/aster/include/aster/aster.h +++ b/aster/include/aster/aster.h @@ -5,4 +5,11 @@ #pragma once -#include "core/global.h" \ No newline at end of file +#include "aster/core/global.h" + +#include "aster/core/window.h" + +#include "aster/systems/commit_manager.h" +#include "aster/systems/context.h" +#include "aster/systems/rendering_device.h" +#include "aster/systems/resource.h" \ No newline at end of file diff --git a/aster/include/aster/core/buffer.h b/aster/include/aster/core/buffer.h index cd398c3..271dd75 100644 --- a/aster/include/aster/core/buffer.h +++ b/aster/include/aster/core/buffer.h @@ -7,6 +7,8 @@ #include "global.h" +namespace aster +{ struct Device; /// A Vulkan buffer wrapper. @@ -115,4 +117,5 @@ concept AnyBufferRef = Deref and AnyBuffer>; template concept BufferRefTo = Deref and BufferInto, TTo>; -} // namespace concepts \ No newline at end of file +} // namespace concepts +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/constants.h b/aster/include/aster/core/constants.h index d31b8a2..1d026b0 100644 --- a/aster/include/aster/core/constants.h +++ b/aster/include/aster/core/constants.h @@ -15,6 +15,8 @@ #include +namespace aster::types +{ using c8 = char; using u8 = uint8_t; using u16 = uint16_t; @@ -34,19 +36,6 @@ using isize = intptr_t; using uptr = uintptr_t; using cstr = char const *; -namespace ansi_color -{ -constexpr auto Black = "\u001b[30m"; -constexpr auto Red = "\u001b[31m"; -constexpr auto Green = "\u001b[32m"; -constexpr auto Yellow = "\u001b[33m"; -constexpr auto Blue = "\u001b[34m"; -constexpr auto Magenta = "\u001b[35m"; -constexpr auto Cyan = "\u001b[36m"; -constexpr auto White = "\u001b[37m"; -constexpr auto Reset = "\u001b[0m"; -} // namespace ansi_color - constexpr f32 operator""_deg(long double degrees) { @@ -83,57 +72,6 @@ using glm::mat2; using glm::mat3; using glm::mat4; -constexpr auto *PROJECT_NAME = "Aster"; - -struct Version -{ - u8 m_Major; - u8 m_Minor; - u8 m_Patch; - - [[nodiscard]] u32 - GetVkVersion() const - { - return VK_MAKE_API_VERSION(0, m_Major, m_Minor, m_Patch); - } -}; - -constexpr Version VERSION = { - .m_Major = 0, - .m_Minor = 1, - .m_Patch = 0, -}; - -constexpr u32 -Kilobyte(u32 const in) -{ - return in * 1024; -} - -constexpr usize -Kilobyte(usize const in) -{ - return in * 1024; -} - -constexpr u32 -Megabyte(u32 const in) -{ - return in * 1024 * 1024; -} - -constexpr usize -Megabyte(usize const in) -{ - return in * 1024 * 1024; -} - -constexpr usize -Gigabyte(usize const in) -{ - return in * 1024 * 1024 * 1024; -} - template constexpr T MaxValue = std::numeric_limits::max(); @@ -156,4 +94,23 @@ template constexpr T Qnan = std::numeric_limits::quiet_NaN(); template -constexpr T Snan = std::numeric_limits::signalling_NaN(); \ No newline at end of file +constexpr T Snan = std::numeric_limits::signalling_NaN(); +} // namespace aster::types + +namespace aster +{ +using namespace types; + +namespace ansi_color +{ +constexpr auto Black = "\u001b[30m"; +constexpr auto Red = "\u001b[31m"; +constexpr auto Green = "\u001b[32m"; +constexpr auto Yellow = "\u001b[33m"; +constexpr auto Blue = "\u001b[34m"; +constexpr auto Magenta = "\u001b[35m"; +constexpr auto Cyan = "\u001b[36m"; +constexpr auto White = "\u001b[37m"; +constexpr auto Reset = "\u001b[0m"; +} // namespace ansi_color +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/device.h b/aster/include/aster/core/device.h index 8e568da..72e03f1 100644 --- a/aster/include/aster/core/device.h +++ b/aster/include/aster/core/device.h @@ -10,6 +10,8 @@ #include #include +namespace aster +{ struct QueueAllocation; struct Instance; struct PhysicalDevice; @@ -81,4 +83,5 @@ Device::SetName(T const &object, cstr name) const vk::Result result = m_Device.setDebugUtilsObjectNameEXT(&objectNameInfo); WARN_IF(Failed(result), "Could not name {:x}: {} as {}. Cause: {}", handle, to_string(object.objectType), name, result); -} \ No newline at end of file +} +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/global.h b/aster/include/aster/core/global.h index 7b4476d..2fbac34 100644 --- a/aster/include/aster/core/global.h +++ b/aster/include/aster/core/global.h @@ -39,8 +39,6 @@ #include -constexpr u32 ASTER_API_VERSION = VK_API_VERSION_1_3; - #define CODE_LOC " @ " __FILE__ ":" VULKAN_HPP_STRINGIFY(__LINE__) #define DISALLOW_COPY_AND_ASSIGN(CLASS_NAME) \ @@ -89,24 +87,67 @@ Failed(vk::Result const result) return result != vk::Result::eSuccess; } -namespace concepts +namespace aster::concepts { template concept VkHandle = vk::isVulkanHandleType::value; } +namespace aster +{ +constexpr u32 ASTER_API_VERSION = VK_API_VERSION_1_3; + using NameString = eastl::fixed_string; -template -struct eastl::hash> // NOLINT(*-dcl58-cpp) +struct Version { - [[nodiscard]] usize - operator()(vk::Flags const &val) + u8 m_Major; + u8 m_Minor; + u8 m_Patch; + + [[nodiscard]] u32 + GetVkVersion() const { - return std::hash()(static_cast(val)); + return VK_MAKE_API_VERSION(0, m_Major, m_Minor, m_Patch); } }; +constexpr Version VERSION = { + .m_Major = 0, + .m_Minor = 1, + .m_Patch = 0, +}; + +constexpr u32 +Kilobyte(u32 const in) +{ + return in * 1024; +} + +constexpr usize +Kilobyte(usize const in) +{ + return in * 1024; +} + +constexpr u32 +Megabyte(u32 const in) +{ + return in * 1024 * 1024; +} + +constexpr usize +Megabyte(usize const in) +{ + return in * 1024 * 1024; +} + +constexpr usize +Gigabyte(usize const in) +{ + return in * 1024 * 1024 * 1024; +} + template [[nodiscard]] usize HashAny(T const &val) @@ -231,7 +272,14 @@ concept VkToString = requires(T a) { { vk::to_string(a) } -> std::convertible_to; }; -template +template +using Ref = eastl::shared_ptr; + +template +using WeakRef = eastl::weak_ptr; +} // namespace aster + +template struct fmt::formatter : nested_formatter { auto @@ -243,8 +291,8 @@ struct fmt::formatter : nested_formatter } }; -template -struct fmt::formatter> : nested_formatter +template +struct fmt::formatter> : nested_formatter { auto // ReSharper disable once CppInconsistentNaming @@ -254,8 +302,12 @@ struct fmt::formatter> : nested_fo } }; -template -using Ref = eastl::shared_ptr; - -template -using WeakRef = eastl::weak_ptr; \ No newline at end of file +template +struct eastl::hash> // NOLINT(*-dcl58-cpp) +{ + [[nodiscard]] aster::usize + operator()(vk::Flags const &val) + { + return std::hash()(static_cast(val)); + } +}; \ No newline at end of file diff --git a/aster/include/aster/core/image.h b/aster/include/aster/core/image.h index 2a78aeb..e765768 100644 --- a/aster/include/aster/core/image.h +++ b/aster/include/aster/core/image.h @@ -7,6 +7,8 @@ #include "global.h" +namespace aster +{ struct StorageTexture; struct Device; @@ -129,4 +131,5 @@ concept AnyImageRef = Deref and AnyImage>; template concept ImageRefTo = Deref and ImageInto, TTo>; -} // namespace concepts \ No newline at end of file +} // namespace concepts +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/image_view.h b/aster/include/aster/core/image_view.h index 9b46979..ec041ec 100644 --- a/aster/include/aster/core/image_view.h +++ b/aster/include/aster/core/image_view.h @@ -8,6 +8,8 @@ #include "global.h" #include "image.h" +namespace aster +{ template struct View { @@ -105,4 +107,5 @@ concept ViewRef = Deref and View>; template concept ViewRefTo = ViewRef and ImageInto::ImageType, TTo>; -} // namespace concepts \ No newline at end of file +} // namespace concepts +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/instance.h b/aster/include/aster/core/instance.h index 1763bac..73e226f 100644 --- a/aster/include/aster/core/instance.h +++ b/aster/include/aster/core/instance.h @@ -7,6 +7,8 @@ #include "global.h" +namespace aster +{ /** * @class Instance * @@ -36,4 +38,5 @@ struct Instance final #endif DISALLOW_COPY_AND_ASSIGN(Instance); -}; \ No newline at end of file +}; +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/physical_device.h b/aster/include/aster/core/physical_device.h index 45d1f00..68a6983 100644 --- a/aster/include/aster/core/physical_device.h +++ b/aster/include/aster/core/physical_device.h @@ -12,6 +12,8 @@ #include +namespace aster +{ struct Window; struct Instance; @@ -89,4 +91,5 @@ class PhysicalDevices : public eastl::fixed_vector { public: PhysicalDevices(Surface const &surface, Instance const &context); -}; \ No newline at end of file +}; +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/pipeline.h b/aster/include/aster/core/pipeline.h index a68f1be..bfa8493 100644 --- a/aster/include/aster/core/pipeline.h +++ b/aster/include/aster/core/pipeline.h @@ -9,6 +9,8 @@ #include +namespace aster +{ struct Device; struct Pipeline @@ -54,4 +56,5 @@ struct Pipeline swap(m_Kind, other.m_Kind); return *this; } -}; \ No newline at end of file +}; +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/queue_allocation.h b/aster/include/aster/core/queue_allocation.h index 4ae7581..d6b4c91 100644 --- a/aster/include/aster/core/queue_allocation.h +++ b/aster/include/aster/core/queue_allocation.h @@ -7,8 +7,11 @@ #include "global.h" +namespace aster +{ struct QueueAllocation { u32 m_Family; u32 m_Count; -}; \ No newline at end of file +}; +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/sampler.h b/aster/include/aster/core/sampler.h index 4d9c97b..44a5850 100644 --- a/aster/include/aster/core/sampler.h +++ b/aster/include/aster/core/sampler.h @@ -7,6 +7,8 @@ #include "global.h" +namespace aster +{ struct Device; struct Sampler final @@ -29,4 +31,5 @@ struct Sampler final Sampler &operator=(Sampler &&other) noexcept; DISALLOW_COPY_AND_ASSIGN(Sampler); -}; \ No newline at end of file +}; +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/size.h b/aster/include/aster/core/size.h index a9cf826..6f99272 100644 --- a/aster/include/aster/core/size.h +++ b/aster/include/aster/core/size.h @@ -7,6 +7,8 @@ #include "global.h" +namespace aster +{ struct Size2D { u32 m_Width = 0; @@ -40,4 +42,5 @@ struct Size2D { return {m_Width, m_Height}; } -}; \ No newline at end of file +}; +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/surface.h b/aster/include/aster/core/surface.h index 8bf7201..58c5d27 100644 --- a/aster/include/aster/core/surface.h +++ b/aster/include/aster/core/surface.h @@ -7,6 +7,8 @@ #include "global.h" +namespace aster +{ struct Instance; struct Window; @@ -26,4 +28,5 @@ struct Surface Surface &operator=(Surface &&other) noexcept; DISALLOW_COPY_AND_ASSIGN(Surface); -}; \ No newline at end of file +}; +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/swapchain.h b/aster/include/aster/core/swapchain.h index 9008173..5d2de18 100644 --- a/aster/include/aster/core/swapchain.h +++ b/aster/include/aster/core/swapchain.h @@ -11,6 +11,8 @@ #include +namespace aster +{ struct PhysicalDevice; struct Surface; struct Device; @@ -42,6 +44,7 @@ struct Swapchain final DISALLOW_COPY_AND_ASSIGN(Swapchain); -private: + private: void Cleanup(); -}; \ No newline at end of file +}; +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/type_traits.h b/aster/include/aster/core/type_traits.h index 9298a10..83bed89 100644 --- a/aster/include/aster/core/type_traits.h +++ b/aster/include/aster/core/type_traits.h @@ -7,6 +7,8 @@ #include "constants.h" +namespace aster +{ struct Device; struct Image; @@ -25,4 +27,5 @@ concept DerefTo = requires(TRef a) { template using DerefType = std::remove_cvref_t())>; -} // namespace concepts \ No newline at end of file +} // namespace concepts +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/core/window.h b/aster/include/aster/core/window.h index 1ba7bcd..3288c1b 100644 --- a/aster/include/aster/core/window.h +++ b/aster/include/aster/core/window.h @@ -12,6 +12,8 @@ #include #include +namespace aster +{ struct Window final { // fields @@ -46,4 +48,5 @@ struct Window final Window &operator=(Window &&other) noexcept; DISALLOW_COPY_AND_ASSIGN(Window); -}; \ No newline at end of file +}; +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/import_types.h b/aster/include/aster/import_types.h new file mode 100644 index 0000000..b2f0877 --- /dev/null +++ b/aster/include/aster/import_types.h @@ -0,0 +1,10 @@ +// ============================================= +// Aster: import_types.h +// Copyright (c) 2020-2024 Anish Bhobe +// ============================================= + +#pragma once + +#include "aster/aster.h" + +using namespace aster::types; \ No newline at end of file diff --git a/aster/include/aster/systems/commit_manager.h b/aster/include/aster/systems/commit_manager.h index 9e970fb..a63a43a 100644 --- a/aster/include/aster/systems/commit_manager.h +++ b/aster/include/aster/systems/commit_manager.h @@ -18,7 +18,7 @@ #include "aster/core/sampler.h" #include "resource.h" -namespace systems +namespace aster { class RenderingDevice; diff --git a/aster/include/aster/systems/context.h b/aster/include/aster/systems/context.h index 35058a8..3288cfd 100644 --- a/aster/include/aster/systems/context.h +++ b/aster/include/aster/systems/context.h @@ -23,7 +23,7 @@ #include #include -namespace systems +namespace aster { class RenderingDevice; diff --git a/aster/include/aster/systems/pipeline_helpers.h b/aster/include/aster/systems/pipeline_helpers.h index 18464d8..165846c 100644 --- a/aster/include/aster/systems/pipeline_helpers.h +++ b/aster/include/aster/systems/pipeline_helpers.h @@ -11,7 +11,7 @@ #include #include -namespace systems +namespace aster { class RenderingDevice; @@ -29,10 +29,10 @@ struct PipelineCreationError PipelineCreationError(); }; -vk::ShaderStageFlagBits SlangToVulkanShaderStage(SlangStage stage); - namespace _internal { +vk::ShaderStageFlagBits SlangToVulkanShaderStage(SlangStage const stage); + struct PipelineLayoutBuilder { RenderingDevice *m_Device; @@ -72,4 +72,4 @@ struct DescriptorLayoutBuilder void Build(); }; } // namespace _internal -} // namespace systems +} // namespace aster diff --git a/aster/include/aster/systems/rendering_device.h b/aster/include/aster/systems/rendering_device.h index d685092..66722bc 100644 --- a/aster/include/aster/systems/rendering_device.h +++ b/aster/include/aster/systems/rendering_device.h @@ -28,42 +28,45 @@ #include #include +namespace aster +{ constexpr static u32 MAX_FRAMES_IN_FLIGHT = 3; struct Window; +} // namespace aster template <> struct eastl::hash { - usize + aster::usize operator()(vk::SamplerCreateInfo const &createInfo) const noexcept { - usize hash = HashAny(createInfo.flags); - hash = HashCombine(hash, HashAny(createInfo.magFilter)); - hash = HashCombine(hash, HashAny(createInfo.minFilter)); - hash = HashCombine(hash, HashAny(createInfo.mipmapMode)); - hash = HashCombine(hash, HashAny(createInfo.addressModeU)); - hash = HashCombine(hash, HashAny(createInfo.addressModeV)); - hash = HashCombine(hash, HashAny(createInfo.addressModeW)); - hash = HashCombine(hash, HashAny(static_cast(createInfo.mipLodBias * 1000))); // Resolution of 10^-3 - hash = HashCombine(hash, HashAny(createInfo.anisotropyEnable)); - hash = HashCombine( + aster::usize hash = aster::HashAny(createInfo.flags); + hash = aster::HashCombine(hash, aster::HashAny(createInfo.magFilter)); + hash = aster::HashCombine(hash, aster::HashAny(createInfo.minFilter)); + hash = aster::HashCombine(hash, aster::HashAny(createInfo.mipmapMode)); + hash = aster::HashCombine(hash, aster::HashAny(createInfo.addressModeU)); + hash = aster::HashCombine(hash, aster::HashAny(createInfo.addressModeV)); + hash = aster::HashCombine(hash, aster::HashAny(createInfo.addressModeW)); + hash = aster::HashCombine(hash, aster::HashAny(static_cast(createInfo.mipLodBias * 1000))); // Resolution of 10^-3 + hash = aster::HashCombine(hash, aster::HashAny(createInfo.anisotropyEnable)); + hash = aster::HashCombine( hash, - HashAny(static_cast(createInfo.maxAnisotropy * 0x20))); // 32:1 Anisotropy is enough resolution - hash = HashCombine(hash, HashAny(createInfo.compareEnable)); - hash = HashCombine(hash, HashAny(createInfo.compareOp)); - hash = HashCombine(hash, HashAny(static_cast(createInfo.minLod * 1000))); // 0.001 resolution is enough. - hash = HashCombine( + aster::HashAny(static_cast(createInfo.maxAnisotropy * 0x20))); // 32:1 Anisotropy is enough resolution + hash = aster::HashCombine(hash, aster::HashAny(createInfo.compareEnable)); + hash = aster::HashCombine(hash, aster::HashAny(createInfo.compareOp)); + hash = aster::HashCombine(hash, aster::HashAny(static_cast(createInfo.minLod * 1000))); // 0.001 resolution is enough. + hash = aster::HashCombine( hash, - HashAny(static_cast(createInfo.maxLod * 1000))); // 0.001 resolution is enough. (1 == NO Clamp) - hash = HashCombine(hash, HashAny(createInfo.borderColor)); - hash = HashCombine(hash, HashAny(createInfo.unnormalizedCoordinates)); + aster::HashAny(static_cast(createInfo.maxLod * 1000))); // 0.001 resolution is enough. (1 == NO Clamp) + hash = aster::HashCombine(hash, aster::HashAny(createInfo.borderColor)); + hash = aster::HashCombine(hash, aster::HashAny(createInfo.unnormalizedCoordinates)); return hash; } }; -namespace systems +namespace aster { // ==================================================================================================== diff --git a/aster/include/aster/systems/resource.h b/aster/include/aster/systems/resource.h index d59eb25..25bb64c 100644 --- a/aster/include/aster/systems/resource.h +++ b/aster/include/aster/systems/resource.h @@ -11,7 +11,7 @@ #include -namespace systems +namespace aster { // ==================================================================================================== diff --git a/aster/include/aster/systems/sync_server.h b/aster/include/aster/systems/sync_server.h index 7e5e8d5..ba8f84f 100644 --- a/aster/include/aster/systems/sync_server.h +++ b/aster/include/aster/systems/sync_server.h @@ -9,13 +9,13 @@ #include #include -namespace systems +namespace aster { class Receipt; class RenderingDevice; } // namespace systems -namespace systems::_internal +namespace aster::_internal { struct TimelinePoint { diff --git a/aster/include/aster/util/files.h b/aster/include/aster/util/files.h index 53e190d..5d7a79f 100644 --- a/aster/include/aster/util/files.h +++ b/aster/include/aster/util/files.h @@ -10,6 +10,9 @@ #include #include +namespace aster +{ eastl::vector ReadFile(std::string_view fileName); eastl::vector ReadFileBytes(std::string_view fileName, bool errorOnFail = true); -bool WriteFileBytes(std::string_view fileName, eastl::span data); \ No newline at end of file +bool WriteFileBytes(std::string_view fileName, eastl::span data); +} // namespace aster \ No newline at end of file diff --git a/aster/include/aster/util/logger.h b/aster/include/aster/util/logger.h index 73c9a3c..dd2a02f 100644 --- a/aster/include/aster/util/logger.h +++ b/aster/include/aster/util/logger.h @@ -9,6 +9,8 @@ #include #include +namespace aster +{ struct Logger { enum class LogType : u32 @@ -94,60 +96,61 @@ struct Logger #endif } }; +} -extern Logger g_Logger; +extern aster::Logger g_Logger; #define MIN_LOG_LEVEL(LOG_LVL) g_Logger.SetMinimumLoggingLevel(LOG_LVL) -#define ERROR(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) -#define WARN(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) -#define INFO(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define ERROR(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define WARN(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define INFO(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ERROR_IF(expr, ...) \ if (static_cast(expr)) [[unlikely]] \ - g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define WARN_IF(expr, ...) \ if (static_cast(expr)) [[unlikely]] \ - g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define INFO_IF(expr, ...) \ if (static_cast(expr)) \ - g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_IF_ERROR(expr, ...) \ ; \ else if (static_cast(expr)) \ - [[unlikely]] g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + [[unlikely]] g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_IF_WARN(expr, ...) \ ; \ else if (static_cast(expr)) \ - [[unlikely]] g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + [[unlikely]] g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_IF_INFO(expr, ...) \ ; \ else if (static_cast(expr)) \ - g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_ERROR(...) \ ; \ - else [[unlikely]] g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) + else [[unlikely]] g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_WARN(...) \ ; \ - else [[unlikely]] g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) + else [[unlikely]] g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_INFO(...) \ ; \ - else g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) + else g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #if !defined(DEBUG_LOG_DISABLED) && !defined(ASTER_NDEBUG) -#define DEBUG(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define DEBUG(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define DEBUG_IF(expr, ...) \ if (static_cast(expr)) \ - g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_IF_DEBUG(expr, ...) \ ; \ else if (static_cast(expr)) \ - g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_DEBUG(...) \ ; \ - else g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) + else g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #else // !defined(DEBUG_LOG_DISABLED) @@ -172,17 +175,17 @@ extern Logger g_Logger; #if !defined(VERBOSE_LOG_DISABLED) && !defined(ASTER_NDEBUG) -#define VERBOSE(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define VERBOSE(...) g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define VERBOSE_IF(expr, ...) \ if (static_cast(expr)) \ - g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_IF_VERBOSE(expr, ...) \ ; \ else if (static_cast(expr)) \ - g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) + g_Logger.LogCond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) #define ELSE_VERBOSE(...) \ ; \ - else g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) + else g_Logger.Log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #else // !defined(DEBUG_LOG_DISABLED) @@ -207,5 +210,5 @@ extern Logger g_Logger; #endif // !defined(VERBOSE_LOG_DISABLED) #define DO(code) , code -#define ABORT(code) exit(static_cast(code)) +#define ABORT(code) exit(static_cast(code)) #define THEN_ABORT(code) , ABORT(code) \ No newline at end of file diff --git a/aster/src/aster/core/buffer.cpp b/aster/src/aster/core/buffer.cpp index ad8e617..51d3ae3 100644 --- a/aster/src/aster/core/buffer.cpp +++ b/aster/src/aster/core/buffer.cpp @@ -7,6 +7,8 @@ #include "aster/core/device.h" +using namespace aster; + Buffer::Buffer(Device const *device, usize const size, vk::BufferUsageFlags const bufferUsage, VmaAllocationCreateFlags const allocationFlags, VmaMemoryUsage const memoryUsage, cstr const name) { diff --git a/aster/src/aster/core/device.cpp b/aster/src/aster/core/device.cpp index ff29948..2b226c6 100644 --- a/aster/src/aster/core/device.cpp +++ b/aster/src/aster/core/device.cpp @@ -12,6 +12,8 @@ #include #include +using namespace aster; + // TODO: This will need to be flexible for devices that don't support some of the extensions. constexpr eastl::array DEVICE_EXTENSIONS = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, diff --git a/aster/src/aster/core/global.cpp b/aster/src/aster/core/global.cpp index 49dc8c2..2f78058 100644 --- a/aster/src/aster/core/global.cpp +++ b/aster/src/aster/core/global.cpp @@ -14,6 +14,8 @@ // NOTE: Vulkan Dispatch Loader Storage - Should only appear once. VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE +using namespace aster; + struct MemorySize { u16 m_Gigabytes; diff --git a/aster/src/aster/core/image.cpp b/aster/src/aster/core/image.cpp index 88724e5..c4dd2ad 100644 --- a/aster/src/aster/core/image.cpp +++ b/aster/src/aster/core/image.cpp @@ -7,6 +7,8 @@ #include "aster/core/device.h" +using namespace aster; + Image & Image::operator=(Image &&other) noexcept { diff --git a/aster/src/aster/core/instance.cpp b/aster/src/aster/core/instance.cpp index 43d34e2..801be75 100644 --- a/aster/src/aster/core/instance.cpp +++ b/aster/src/aster/core/instance.cpp @@ -10,6 +10,8 @@ #include #include +using namespace aster; + VKAPI_ATTR b32 VKAPI_CALL DebugCallback(vk::DebugUtilsMessageSeverityFlagBitsEXT const messageSeverity, vk::DebugUtilsMessageTypeFlagsEXT const messageType, @@ -43,7 +45,7 @@ Instance::Instance(cstr const appName, Version const version, bool enableValidat vk::ApplicationInfo const appInfo = { .pApplicationName = appName, .applicationVersion = version.GetVkVersion(), - .pEngineName = PROJECT_NAME, + .pEngineName = "aster", .engineVersion = version.GetVkVersion(), .apiVersion = ASTER_API_VERSION, }; diff --git a/aster/src/aster/core/physical_device.cpp b/aster/src/aster/core/physical_device.cpp index 368ab99..1a01c0f 100644 --- a/aster/src/aster/core/physical_device.cpp +++ b/aster/src/aster/core/physical_device.cpp @@ -8,8 +8,10 @@ #include "aster/core/instance.h" #include "aster/core/surface.h" +using namespace aster; + [[nodiscard]] vk::SurfaceCapabilitiesKHR -GetSurfaceCapabilities(vk::PhysicalDevice const physicalDevice, vk::SurfaceKHR const surface) +aster::GetSurfaceCapabilities(vk::PhysicalDevice const physicalDevice, vk::SurfaceKHR const surface) { vk::SurfaceCapabilitiesKHR surfaceCapabilities; @@ -21,7 +23,7 @@ GetSurfaceCapabilities(vk::PhysicalDevice const physicalDevice, vk::SurfaceKHR c } [[nodiscard]] eastl::vector -GetSurfaceFormats(vk::PhysicalDevice const physicalDevice, vk::SurfaceKHR const surface) +aster::GetSurfaceFormats(vk::PhysicalDevice const physicalDevice, vk::SurfaceKHR const surface) { // vk::Result::eIncomplete should not occur in this function. The rest are errors. Thus, abort is allowed. u32 count = 0; @@ -38,7 +40,7 @@ GetSurfaceFormats(vk::PhysicalDevice const physicalDevice, vk::SurfaceKHR const } [[nodiscard]] eastl::vector -GetSurfacePresentModes(vk::PhysicalDevice const physicalDevice, vk::SurfaceKHR const surface) +aster::GetSurfacePresentModes(vk::PhysicalDevice const physicalDevice, vk::SurfaceKHR const surface) { // vk::Result::eIncomplete should not occur in this function. The rest are errors. Thus, abort is allowed. u32 count = 0; diff --git a/aster/src/aster/core/pipeline.cpp b/aster/src/aster/core/pipeline.cpp index 418c157..9ff508e 100644 --- a/aster/src/aster/core/pipeline.cpp +++ b/aster/src/aster/core/pipeline.cpp @@ -7,6 +7,8 @@ #include "aster/core/device.h" +using namespace aster; + Pipeline::Pipeline(Device const *device, vk::PipelineLayout const layout, vk::Pipeline const pipeline, eastl::vector &&setLayouts, Kind const kind) : m_Device{device} diff --git a/aster/src/aster/core/sampler.cpp b/aster/src/aster/core/sampler.cpp index 6459c7f..d5bef78 100644 --- a/aster/src/aster/core/sampler.cpp +++ b/aster/src/aster/core/sampler.cpp @@ -7,6 +7,8 @@ #include "aster/core/device.h" +using namespace aster; + Sampler::~Sampler() { if (!IsValid()) diff --git a/aster/src/aster/core/surface.cpp b/aster/src/aster/core/surface.cpp index d4ded32..79043a8 100644 --- a/aster/src/aster/core/surface.cpp +++ b/aster/src/aster/core/surface.cpp @@ -8,6 +8,8 @@ #include "aster/core/instance.h" #include "aster/core/window.h" +using namespace aster; + Surface::Surface(Instance &context, Window const &window) : m_Context(&context) { diff --git a/aster/src/aster/core/swapchain.cpp b/aster/src/aster/core/swapchain.cpp index 1124b54..f9c0351 100644 --- a/aster/src/aster/core/swapchain.cpp +++ b/aster/src/aster/core/swapchain.cpp @@ -9,6 +9,8 @@ #include "aster/core/physical_device.h" #include "aster/core/surface.h" +using namespace aster; + [[nodiscard]] vk::Extent2D GetExtent(Size2D size, vk::SurfaceCapabilitiesKHR *surfaceCapabilities); Swapchain::Swapchain(Surface const &surface, Device const &device, Size2D size) diff --git a/aster/src/aster/core/window.cpp b/aster/src/aster/core/window.cpp index 63e0305..a92df96 100644 --- a/aster/src/aster/core/window.cpp +++ b/aster/src/aster/core/window.cpp @@ -8,6 +8,8 @@ #include "aster/core/instance.h" #include "aster/util/logger.h" +using namespace aster; + std::atomic_uint64_t Window::m_WindowCount = 0; std::atomic_bool Window::m_IsGlfwInit = false; diff --git a/aster/src/aster/systems/commit_manager.cpp b/aster/src/aster/systems/commit_manager.cpp index 1f4ccd2..460394d 100644 --- a/aster/src/aster/systems/commit_manager.cpp +++ b/aster/src/aster/systems/commit_manager.cpp @@ -10,7 +10,7 @@ #include "aster/core/image_view.h" #include "aster/systems/rendering_device.h" -using namespace systems; +using namespace aster; CommitManager *CommitManager::m_Instance = nullptr; diff --git a/aster/src/aster/systems/context.cpp b/aster/src/aster/systems/context.cpp index f4db75e..790bff2 100644 --- a/aster/src/aster/systems/context.cpp +++ b/aster/src/aster/systems/context.cpp @@ -8,6 +8,8 @@ #include "aster/systems/commit_manager.h" #include "aster/systems/rendering_device.h" +using namespace aster; + constexpr static u32 GetFormatSize(vk::Format const format) { @@ -129,34 +131,34 @@ GetFormatSize(vk::Format const format) } void -systems::Context::KeepAlive(Ref const &buffer) +Context::KeepAlive(Ref const &buffer) { assert(m_Pool); m_Pool->KeepAlive(buffer); } void -systems::Context::KeepAlive(Ref const &image) +Context::KeepAlive(Ref const &image) { assert(m_Pool); m_Pool->KeepAlive(image); } void -systems::Context::KeepAlive(Ref const &view) +Context::KeepAlive(Ref const &view) { assert(m_Pool); m_Pool->KeepAlive(view); } void -systems::Context::Dependency(vk::DependencyInfo const &dependencyInfo) +Context::Dependency(vk::DependencyInfo const &dependencyInfo) { m_Cmd.pipelineBarrier2(&dependencyInfo); } void -systems::Context::Begin() +Context::Begin() { vk::CommandBufferBeginInfo commandBufferBeginInfo = { .flags = vk::CommandBufferUsageFlagBits::eOneTimeSubmit, @@ -169,7 +171,7 @@ systems::Context::Begin() // Release versions inline 'no-op'. #if !defined(ASTER_NDEBUG) void -systems::Context::BeginDebugRegion(cstr const name, vec4 const color) +Context::BeginDebugRegion(cstr const name, vec4 const color) { vk::DebugUtilsLabelEXT const label = { .pLabelName = name, @@ -179,21 +181,21 @@ systems::Context::BeginDebugRegion(cstr const name, vec4 const color) } void -systems::Context::EndDebugRegion() +Context::EndDebugRegion() { m_Cmd.endDebugUtilsLabelEXT(); } #endif void -systems::Context::End() +Context::End() { auto result = m_Cmd.end(); ERROR_IF(Failed(result), "Could not end context") THEN_ABORT(result); } void -systems::ComputeContext::Dispatch(Pipeline const &pipeline, u32 x, u32 y, u32 z, usize size, void *data) +ComputeContext::Dispatch(Pipeline const &pipeline, u32 x, u32 y, u32 z, usize size, void *data) { BindPipeline(pipeline); PushConstantBlock(0, size, data); @@ -202,7 +204,7 @@ systems::ComputeContext::Dispatch(Pipeline const &pipeline, u32 x, u32 y, u32 z, } void -systems::ComputeContext::BindPipeline(Pipeline const &pipeline) +ComputeContext::BindPipeline(Pipeline const &pipeline) { auto bindPoint = vk::PipelineBindPoint::eGraphics; switch (pipeline.m_Kind) @@ -229,57 +231,57 @@ systems::ComputeContext::BindPipeline(Pipeline const &pipeline) } void -systems::GraphicsContext::SetViewport(vk::Viewport const &viewport) +GraphicsContext::SetViewport(vk::Viewport const &viewport) { m_Cmd.setViewport(0, 1, &viewport); } void -systems::GraphicsContext::BindVertexBuffer(Ref const &vertexBuffer) +GraphicsContext::BindVertexBuffer(Ref const &vertexBuffer) { constexpr vk::DeviceSize offset = 0; m_Cmd.bindVertexBuffers(0, 1, &vertexBuffer->m_Buffer, &offset); } void -systems::GraphicsContext::BindIndexBuffer(Ref const &indexBuffer) +GraphicsContext::BindIndexBuffer(Ref const &indexBuffer) { m_Cmd.bindIndexBuffer(indexBuffer->m_Buffer, 0, vk::IndexType::eUint32); } void -systems::GraphicsContext::Draw(usize const vertexCount) +GraphicsContext::Draw(usize const vertexCount) { m_Cmd.draw(static_cast(vertexCount), 1, 0, 0); } void -systems::GraphicsContext::DrawIndexed(usize indexCount) +GraphicsContext::DrawIndexed(usize indexCount) { m_Cmd.drawIndexed(static_cast(indexCount), 1, 0, 0, 0); } void -systems::GraphicsContext::DrawIndexed(usize const indexCount, usize const firstIndex, usize const firstVertex) +GraphicsContext::DrawIndexed(usize const indexCount, usize const firstIndex, usize const firstVertex) { m_Cmd.drawIndexed(static_cast(indexCount), 1, static_cast(firstIndex), static_cast(firstVertex), 0); } void -systems::GraphicsContext::BeginRendering(vk::RenderingInfo const &renderingInfo) +GraphicsContext::BeginRendering(vk::RenderingInfo const &renderingInfo) { m_Cmd.beginRendering(&renderingInfo); m_Cmd.setScissor(0, 1, &renderingInfo.renderArea); } void -systems::GraphicsContext::EndRendering() +GraphicsContext::EndRendering() { m_Cmd.endRendering(); } void -systems::TransferContext::UploadTexture(Ref const &image, eastl::span const &data) +TransferContext::UploadTexture(Ref const &image, eastl::span const &data) { ERROR_IF(not(image and image->IsValid()), "Invalid image"); @@ -314,7 +316,7 @@ systems::TransferContext::UploadTexture(Ref const &image, eastl::span } void -systems::TransferContext::UploadBuffer(Ref const &buffer, usize size, void const *data) +TransferContext::UploadBuffer(Ref const &buffer, usize size, void const *data) { ERROR_IF(not(buffer and buffer->IsValid()), "Invalid buffer"); @@ -333,18 +335,18 @@ systems::TransferContext::UploadBuffer(Ref const &buffer, usize size, vo } void -systems::TransferContext::Blit(vk::BlitImageInfo2 const &mipBlitInfo) +TransferContext::Blit(vk::BlitImageInfo2 const &mipBlitInfo) { m_Cmd.blitImage2(&mipBlitInfo); } -systems::TransferContext::TransferContext(TransferContext &&other) noexcept +TransferContext::TransferContext(TransferContext &&other) noexcept : Context{std::move(other)} { } -systems::TransferContext & -systems::TransferContext::operator=(TransferContext &&other) noexcept +TransferContext & +TransferContext::operator=(TransferContext &&other) noexcept { if (this == &other) return *this; @@ -353,7 +355,7 @@ systems::TransferContext::operator=(TransferContext &&other) noexcept } void -systems::ComputeContext::PushConstantBlock(usize const offset, usize const size, void const *data) +ComputeContext::PushConstantBlock(usize const offset, usize const size, void const *data) { assert(m_PipelineInUse); @@ -371,7 +373,7 @@ systems::ComputeContext::PushConstantBlock(usize const offset, usize const size, m_Cmd.pushConstants(m_PipelineInUse->m_Layout, stage, static_cast(offset), static_cast(size), data); } -using namespace systems::_internal; +using namespace _internal; ContextPool::ContextPool(RenderingDevice &device, u32 const queueFamilyIndex, ManagedBy const managedBy) : m_Device{&device} @@ -468,7 +470,7 @@ ContextPool::AllocateCommandBuffer() return cmd; } -systems::Context +Context ContextPool::CreateContext() { return Context{*this, AllocateCommandBuffer()}; @@ -487,19 +489,19 @@ ContextPool::Reset() m_OwnedImageViews.clear(); } -systems::TransferContext +TransferContext TransferContextPool::CreateTransferContext() { return TransferContext{*this, AllocateCommandBuffer()}; } -systems::ComputeContext +ComputeContext ComputeContextPool::CreateComputeContext() { return ComputeContext{*this, AllocateCommandBuffer()}; } -systems::GraphicsContext +GraphicsContext GraphicsContextPool::CreateGraphicsContext() { return GraphicsContext{*this, AllocateCommandBuffer()}; diff --git a/aster/src/aster/systems/pipeline_helpers.cpp b/aster/src/aster/systems/pipeline_helpers.cpp index 3fcca35..dff420c 100644 --- a/aster/src/aster/systems/pipeline_helpers.cpp +++ b/aster/src/aster/systems/pipeline_helpers.cpp @@ -7,7 +7,8 @@ #include -using namespace systems::_internal; +using namespace aster; +using namespace aster::_internal; struct WhatVisitor { @@ -48,39 +49,39 @@ struct ValueVisitor }; i32 -systems::PipelineCreationError::Value() +PipelineCreationError::Value() { return std::visit(ValueVisitor{}, m_Data); } -systems::PipelineCreationError::PipelineCreationError(vk::Result res) +PipelineCreationError::PipelineCreationError(vk::Result res) : m_Data{res} { } -systems::PipelineCreationError::PipelineCreationError(SlangResult res) +PipelineCreationError::PipelineCreationError(SlangResult res) : m_Data{res} { } -systems::PipelineCreationError::PipelineCreationError() +PipelineCreationError::PipelineCreationError() : m_Data{std::monostate{}} { } -systems::PipelineCreationError::operator bool() const +PipelineCreationError::operator bool() const { return not std::holds_alternative(m_Data); } std::string -systems::PipelineCreationError::What() +PipelineCreationError::What() { return std::visit(WhatVisitor{}, m_Data); } vk::ShaderStageFlagBits -systems::SlangToVulkanShaderStage(SlangStage const stage) +_internal::SlangToVulkanShaderStage(SlangStage const stage) { switch (stage) { diff --git a/aster/src/aster/systems/rendering_device.cpp b/aster/src/aster/systems/rendering_device.cpp index 2109716..bf03b90 100644 --- a/aster/src/aster/systems/rendering_device.cpp +++ b/aster/src/aster/systems/rendering_device.cpp @@ -21,37 +21,39 @@ #undef DOMAIN #endif +using namespace aster; + static constexpr QueueSupportFlags REQUIRED_QUEUE_SUPPORT = QueueSupportFlags{} | QueueSupportFlagBits::eGraphics | QueueSupportFlagBits::eCompute | QueueSupportFlagBits::ePresent | QueueSupportFlagBits::eTransfer; vk::CompareOp -DepthOpToVulkan(systems::GraphicsPipelineCreateInfo::CompareOp depthOp) +DepthOpToVulkan(GraphicsPipelineCreateInfo::CompareOp depthOp) { switch (depthOp) { - case systems::GraphicsPipelineCreateInfo::CompareOp::eNever: + case GraphicsPipelineCreateInfo::CompareOp::eNever: return vk::CompareOp::eNever; - case systems::GraphicsPipelineCreateInfo::CompareOp::eLessThan: + case GraphicsPipelineCreateInfo::CompareOp::eLessThan: return vk::CompareOp::eLess; - case systems::GraphicsPipelineCreateInfo::CompareOp::eEqualTo: + case GraphicsPipelineCreateInfo::CompareOp::eEqualTo: return vk::CompareOp::eEqual; - case systems::GraphicsPipelineCreateInfo::CompareOp::eGreaterThan: + case GraphicsPipelineCreateInfo::CompareOp::eGreaterThan: return vk::CompareOp::eGreater; - case systems::GraphicsPipelineCreateInfo::CompareOp::eLessThanOrEqualTo: + case GraphicsPipelineCreateInfo::CompareOp::eLessThanOrEqualTo: return vk::CompareOp::eLessOrEqual; - case systems::GraphicsPipelineCreateInfo::CompareOp::eGreaterThanOrEqualTo: + case GraphicsPipelineCreateInfo::CompareOp::eGreaterThanOrEqualTo: return vk::CompareOp::eGreaterOrEqual; - case systems::GraphicsPipelineCreateInfo::CompareOp::eNotEqualTo: + case GraphicsPipelineCreateInfo::CompareOp::eNotEqualTo: return vk::CompareOp::eNotEqual; - case systems::GraphicsPipelineCreateInfo::CompareOp::eAlways: + case GraphicsPipelineCreateInfo::CompareOp::eAlways: return vk::CompareOp::eAlways; } return vk::CompareOp::eAlways; } vk::PipelineDepthStencilStateCreateInfo -systems::GraphicsPipelineCreateInfo::GetDepthStencilStateCreateInfo() const +GraphicsPipelineCreateInfo::GetDepthStencilStateCreateInfo() const { bool depthEnabled = false; bool depthWriteEnabled = false; @@ -77,7 +79,7 @@ systems::GraphicsPipelineCreateInfo::GetDepthStencilStateCreateInfo() const } PhysicalDevice -systems::DefaultPhysicalDeviceSelector(PhysicalDevices const &physicalDevices) +aster::DefaultPhysicalDeviceSelector(PhysicalDevices const &physicalDevices) { for (auto &physicalDevice : physicalDevices) { @@ -107,7 +109,7 @@ systems::DefaultPhysicalDeviceSelector(PhysicalDevices const &physicalDevices) // ==================================================================================================== Ref -systems::RenderingDevice::CreateStorageBuffer(usize const size, cstr const name) +RenderingDevice::CreateStorageBuffer(usize const size, cstr const name) { // TODO: Storage and Index buffer are set. // This is hacky and should be improved. @@ -122,7 +124,7 @@ systems::RenderingDevice::CreateStorageBuffer(usize const size, cstr const name) } Ref -systems::RenderingDevice::CreateIndexBuffer(usize size, cstr name) +RenderingDevice::CreateIndexBuffer(usize size, cstr name) { // TODO: Storage and Index buffer are set. // This is hacky and should be improved. @@ -137,7 +139,7 @@ systems::RenderingDevice::CreateIndexBuffer(usize size, cstr name) } Ref -systems::RenderingDevice::CreateUniformBuffer(usize const size, cstr const name) +RenderingDevice::CreateUniformBuffer(usize const size, cstr const name) { constexpr vk::BufferUsageFlags usage = vk::BufferUsageFlagBits::eUniformBuffer; constexpr VmaAllocationCreateFlags createFlags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | @@ -148,7 +150,7 @@ systems::RenderingDevice::CreateUniformBuffer(usize const size, cstr const name) } Ref -systems::RenderingDevice::CreateStagingBuffer(usize const size, cstr const name) +RenderingDevice::CreateStagingBuffer(usize const size, cstr const name) { constexpr vk::BufferUsageFlags usage = vk::BufferUsageFlagBits::eTransferSrc; constexpr VmaAllocationCreateFlags createFlags = @@ -158,7 +160,7 @@ systems::RenderingDevice::CreateStagingBuffer(usize const size, cstr const name) } Ref -systems::RenderingDevice::CreateVertexBuffer(usize const size, cstr const name) +RenderingDevice::CreateVertexBuffer(usize const size, cstr const name) { constexpr vk::BufferUsageFlags usage = vk::BufferUsageFlagBits::eVertexBuffer; constexpr VmaAllocationCreateFlags createFlags = @@ -172,10 +174,10 @@ systems::RenderingDevice::CreateVertexBuffer(usize const size, cstr const name) #pragma region Image Management // ==================================================================================================== -vk::ImageCreateInfo ToImageCreateInfo(systems::Texture2DCreateInfo const &createInfo); -vk::ImageCreateInfo ToImageCreateInfo(systems::TextureCubeCreateInfo const &createInfo); -vk::ImageCreateInfo ToImageCreateInfo(systems::AttachmentCreateInfo const &createInfo); -vk::ImageCreateInfo ToImageCreateInfo(systems::DepthStencilImageCreateInfo const &createInfo); +vk::ImageCreateInfo ToImageCreateInfo(Texture2DCreateInfo const &createInfo); +vk::ImageCreateInfo ToImageCreateInfo(TextureCubeCreateInfo const &createInfo); +vk::ImageCreateInfo ToImageCreateInfo(AttachmentCreateInfo const &createInfo); +vk::ImageCreateInfo ToImageCreateInfo(DepthStencilImageCreateInfo const &createInfo); namespace usage_flags { @@ -189,7 +191,7 @@ constexpr vk::ImageUsageFlags DEPTH_STENCIL_ATTACHMENT = vk::ImageUsageFlagBits: } // namespace usage_flags Ref -systems::RenderingDevice::CreateTexture2D(Texture2DCreateInfo const &createInfo) +RenderingDevice::CreateTexture2D(Texture2DCreateInfo const &createInfo) { constexpr VmaAllocationCreateInfo allocationCreateInfo = { .flags = {}, @@ -221,7 +223,7 @@ systems::RenderingDevice::CreateTexture2D(Texture2DCreateInfo const &createInfo) } Ref -systems::RenderingDevice::CreateTextureCube(TextureCubeCreateInfo const &createInfo) +RenderingDevice::CreateTextureCube(TextureCubeCreateInfo const &createInfo) { constexpr VmaAllocationCreateInfo allocationCreateInfo = { .flags = {}, @@ -253,7 +255,7 @@ systems::RenderingDevice::CreateTextureCube(TextureCubeCreateInfo const &createI } Ref -systems::RenderingDevice::CreateAttachment(AttachmentCreateInfo const &createInfo) +RenderingDevice::CreateAttachment(AttachmentCreateInfo const &createInfo) { constexpr VmaAllocationCreateInfo allocationCreateInfo = { .flags = VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT, @@ -280,7 +282,7 @@ systems::RenderingDevice::CreateAttachment(AttachmentCreateInfo const &createInf } Ref -systems::RenderingDevice::CreateDepthStencilImage(DepthStencilImageCreateInfo const &createInfo) +RenderingDevice::CreateDepthStencilImage(DepthStencilImageCreateInfo const &createInfo) { constexpr VmaAllocationCreateInfo allocationCreateInfo = { .flags = VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT, @@ -307,7 +309,7 @@ systems::RenderingDevice::CreateDepthStencilImage(DepthStencilImageCreateInfo co } vk::ImageCreateInfo -ToImageCreateInfo(systems::Texture2DCreateInfo const &createInfo) +ToImageCreateInfo(Texture2DCreateInfo const &createInfo) { auto &[format, extent, name, isSampled, isMipMapped, isStorage] = createInfo; @@ -335,7 +337,7 @@ ToImageCreateInfo(systems::Texture2DCreateInfo const &createInfo) } vk::ImageCreateInfo -ToImageCreateInfo(systems::TextureCubeCreateInfo const &createInfo) +ToImageCreateInfo(TextureCubeCreateInfo const &createInfo) { auto &[format, side, name, isSampled, isMipMapped, isStorage] = createInfo; @@ -363,7 +365,7 @@ ToImageCreateInfo(systems::TextureCubeCreateInfo const &createInfo) } vk::ImageCreateInfo -ToImageCreateInfo(systems::AttachmentCreateInfo const &createInfo) +ToImageCreateInfo(AttachmentCreateInfo const &createInfo) { auto &[format, extent, name] = createInfo; @@ -380,7 +382,7 @@ ToImageCreateInfo(systems::AttachmentCreateInfo const &createInfo) } vk::ImageCreateInfo -ToImageCreateInfo(systems::DepthStencilImageCreateInfo const &createInfo) +ToImageCreateInfo(DepthStencilImageCreateInfo const &createInfo) { auto &[extent, name] = createInfo; @@ -404,7 +406,7 @@ ToImageCreateInfo(systems::DepthStencilImageCreateInfo const &createInfo) // ==================================================================================================== Ref -systems::RenderingDevice::CreateView(ViewCreateInfo const &createInfo) +RenderingDevice::CreateView(ViewCreateInfo const &createInfo) { auto const layerCount = createInfo.GetLayerCount(); auto const mipCount = createInfo.GetMipLevelCount(); @@ -432,7 +434,7 @@ systems::RenderingDevice::CreateView(ViewCreateInfo const &createInfo) // ==================================================================================================== Ref -systems::RenderingDevice::CreateTexture2DWithView(Texture2DCreateInfo const &createInfo) +RenderingDevice::CreateTexture2DWithView(Texture2DCreateInfo const &createInfo) { return CreateView({ .m_Image = CastImage(CreateTexture2D(createInfo)), @@ -443,7 +445,7 @@ systems::RenderingDevice::CreateTexture2DWithView(Texture2DCreateInfo const &cre } Ref -systems::RenderingDevice::CreateTextureCubeWithView(TextureCubeCreateInfo const &createInfo) +RenderingDevice::CreateTextureCubeWithView(TextureCubeCreateInfo const &createInfo) { return CreateView({ .m_Image = CreateTextureCube(createInfo), @@ -454,7 +456,7 @@ systems::RenderingDevice::CreateTextureCubeWithView(TextureCubeCreateInfo const } Ref -systems::RenderingDevice::CreateAttachmentWithView(AttachmentCreateInfo const &createInfo) +RenderingDevice::CreateAttachmentWithView(AttachmentCreateInfo const &createInfo) { return CreateView({ .m_Image = CreateAttachment(createInfo), @@ -465,7 +467,7 @@ systems::RenderingDevice::CreateAttachmentWithView(AttachmentCreateInfo const &c } Ref -systems::RenderingDevice::CreateDepthStencilImageWithView(DepthStencilImageCreateInfo const &createInfo) +RenderingDevice::CreateDepthStencilImageWithView(DepthStencilImageCreateInfo const &createInfo) { return CreateView({ .m_Image = CreateDepthStencilImage(createInfo), @@ -482,7 +484,7 @@ systems::RenderingDevice::CreateDepthStencilImageWithView(DepthStencilImageCreat // ==================================================================================================== Ref -systems::RenderingDevice::CreateSampler(SamplerCreateInfo const &createInfo) +RenderingDevice::CreateSampler(SamplerCreateInfo const &createInfo) { auto vkCreateInfo = static_cast(createInfo); @@ -501,8 +503,8 @@ systems::RenderingDevice::CreateSampler(SamplerCreateInfo const &createInfo) // Pipelines // ---------------------------------------------------------------------------------------------------- -systems::PipelineCreationError -systems::RenderingDevice::CreateGraphicsPipeline(Pipeline &pipelineOut, GraphicsPipelineCreateInfo const &createInfo) +PipelineCreationError +RenderingDevice::CreateGraphicsPipeline(Pipeline &pipelineOut, GraphicsPipelineCreateInfo const &createInfo) { eastl::fixed_vector shaders; Slang::ComPtr program; @@ -640,8 +642,8 @@ systems::RenderingDevice::CreateGraphicsPipeline(Pipeline &pipelineOut, Graphics return {}; } -systems::PipelineCreationError -systems::RenderingDevice::CreateComputePipeline(Pipeline &pipelineOut, ComputePipelineCreateInfo const &createInfo) +PipelineCreationError +RenderingDevice::CreateComputePipeline(Pipeline &pipelineOut, ComputePipelineCreateInfo const &createInfo) { eastl::fixed_vector shaders; Slang::ComPtr program; @@ -698,8 +700,8 @@ systems::RenderingDevice::CreateComputePipeline(Pipeline &pipelineOut, ComputePi ERROR("Unimplemented Stage " #STAGE); \ return SLANG_FAIL -systems::PipelineCreationError -systems::RenderingDevice::CreateShaders( +PipelineCreationError +RenderingDevice::CreateShaders( eastl::fixed_vector &shadersOut, Slang::ComPtr &program, std::span const &shaders) { @@ -836,7 +838,7 @@ systems::RenderingDevice::CreateShaders( if (auto entryPointReflection = progLayout->getEntryPointByIndex(entryPoint)) { outShader.pName = entryPointReflection->getName(); - outShader.stage = SlangToVulkanShaderStage(entryPointReflection->getStage()); + outShader.stage = _internal::SlangToVulkanShaderStage(entryPointReflection->getStage()); } } @@ -870,20 +872,20 @@ systems::RenderingDevice::CreateShaders( struct PipelineLayoutBuilder { - systems::RenderingDevice *m_Device; + RenderingDevice *m_Device; eastl::vector m_DescriptorSetLayouts; eastl::vector m_PushConstantRanges; - explicit PipelineLayoutBuilder(systems::RenderingDevice *device) + explicit PipelineLayoutBuilder(RenderingDevice *device) : m_Device{device} { } - systems::PipelineCreationError + PipelineCreationError Build(vk::PipelineLayout &pipelineLayout, eastl::vector &descriptorSetLayouts); }; -systems::PipelineCreationError +PipelineCreationError PipelineLayoutBuilder::Build(vk::PipelineLayout &pipelineLayout, eastl::vector &descriptorSetLayouts) { @@ -901,8 +903,8 @@ PipelineLayoutBuilder::Build(vk::PipelineLayout &pipelineLayout, return result; } -systems::PipelineCreationError -systems::RenderingDevice::CreatePipelineLayout(vk::PipelineLayout &pipelineLayout, +PipelineCreationError +RenderingDevice::CreatePipelineLayout(vk::PipelineLayout &pipelineLayout, Slang::ComPtr const &program) { using Slang::ComPtr; @@ -993,7 +995,7 @@ FindAsyncComputeQueue(PhysicalDevice const &physicalDevice, u32 primaryQueueFami return std::nullopt; } -systems::RenderingDevice::RenderingDevice(DeviceCreateInfo const &createInfo) +RenderingDevice::RenderingDevice(DeviceCreateInfo const &createInfo) : m_Window{createInfo.m_Window} , m_SyncServer{new _internal::SyncServer{*this}} { @@ -1110,7 +1112,7 @@ systems::RenderingDevice::RenderingDevice(DeviceCreateInfo const &createInfo) } } -systems::RenderingDevice::~RenderingDevice() +RenderingDevice::~RenderingDevice() { for (auto &frame : m_Frames) { @@ -1125,8 +1127,8 @@ systems::RenderingDevice::~RenderingDevice() #pragma region Frames // ==================================================================================================== -systems::Frame & -systems::RenderingDevice::GetNextFrame() +Frame & +RenderingDevice::GetNextFrame() { if (m_CommitManager) m_CommitManager->Update(); @@ -1167,7 +1169,7 @@ systems::RenderingDevice::GetNextFrame() } void -systems::RenderingDevice::Present(Frame &frame, GraphicsContext &graphicsContext) +RenderingDevice::Present(Frame &frame, GraphicsContext &graphicsContext) { vk::PipelineStageFlags waitDstStage = vk::PipelineStageFlagBits::eColorAttachmentOutput; vk::SubmitInfo const submitInfo = { @@ -1205,20 +1207,20 @@ systems::RenderingDevice::Present(Frame &frame, GraphicsContext &graphicsContext } } -systems::TransferContext -systems::RenderingDevice::CreateTransferContext() +TransferContext +RenderingDevice::CreateTransferContext() { return m_TransferContextPool.CreateTransferContext(); } -systems::ComputeContext -systems::RenderingDevice::CreateComputeContext() +ComputeContext +RenderingDevice::CreateComputeContext() { return m_ComputeContextPool.CreateComputeContext(); } -systems::Receipt -systems::RenderingDevice::Submit(Context &context) +Receipt +RenderingDevice::Submit(Context &context) { auto const rect = m_SyncServer->Allocate(); auto &entry = m_SyncServer->GetEntry(rect); @@ -1254,13 +1256,13 @@ systems::RenderingDevice::Submit(Context &context) } void -systems::RenderingDevice::WaitOn(Receipt recpt) +RenderingDevice::WaitOn(Receipt recpt) { m_SyncServer->WaitOn(recpt); } void -systems::Frame::Reset(u32 imageIdx, vk::Image swapchainImage, vk::ImageView swapchainImageView, Size2D swapchainSize) +Frame::Reset(u32 imageIdx, vk::Image swapchainImage, vk::ImageView swapchainImageView, Size2D swapchainSize) { AbortIfFailedMV(m_Device->m_Device->resetFences(1, &m_FrameAvailableFence), "Fence {} reset failed.", m_FrameIdx); @@ -1274,33 +1276,33 @@ systems::Frame::Reset(u32 imageIdx, vk::Image swapchainImage, vk::ImageView swap m_SwapchainSize = swapchainSize; } -systems::GraphicsContext -systems::Frame::CreateGraphicsContext() +GraphicsContext +Frame::CreateGraphicsContext() { return m_PrimaryPool.CreateGraphicsContext(); } -systems::TransferContext -systems::Frame::CreateAsyncTransferContext() +TransferContext +Frame::CreateAsyncTransferContext() { return m_AsyncTransferPool.CreateTransferContext(); } -systems::ComputeContext -systems::Frame::CreateAsyncComputeContext() +ComputeContext +Frame::CreateAsyncComputeContext() { return m_AsyncComputePool.CreateComputeContext(); } void -systems::Frame::WaitUntilReady() +Frame::WaitUntilReady() { AbortIfFailedMV(m_Device->m_Device->waitForFences(1, &m_FrameAvailableFence, true, MaxValue), "Waiting for fence {} failed.", m_FrameIdx); } -systems::Frame & -systems::Frame::operator=(Frame &&other) noexcept +Frame & +Frame::operator=(Frame &&other) noexcept { if (this == &other) return *this; @@ -1319,7 +1321,7 @@ systems::Frame::operator=(Frame &&other) noexcept return *this; } -systems::Frame::Frame(RenderingDevice &device, u32 frameIndex, u32 const primaryQueueFamily, +Frame::Frame(RenderingDevice &device, u32 frameIndex, u32 const primaryQueueFamily, u32 const asyncTransferQueue, u32 const asyncComputeQueue) : m_Device{&device} , m_PrimaryPool{device, primaryQueueFamily, _internal::ContextPool::ManagedBy::eFrame} @@ -1348,7 +1350,7 @@ systems::Frame::Frame(RenderingDevice &device, u32 frameIndex, u32 const primary DEBUG("Frame {} created successfully.", frameIndex); } -systems::Frame::Frame(Frame &&other) noexcept +Frame::Frame(Frame &&other) noexcept : m_Device{Take(other.m_Device)} , m_PrimaryPool{std::move(other.m_PrimaryPool)} , m_AsyncTransferPool{std::move(other.m_AsyncTransferPool)} diff --git a/aster/src/aster/systems/sync_server.cpp b/aster/src/aster/systems/sync_server.cpp index 6f40b52..c4f58c7 100644 --- a/aster/src/aster/systems/sync_server.cpp +++ b/aster/src/aster/systems/sync_server.cpp @@ -7,7 +7,8 @@ #include "aster/systems/rendering_device.h" -using namespace systems::_internal; +using namespace aster; +using namespace aster::_internal; SyncServer::Entry::Entry(RenderingDevice &device) : m_CurrentPoint{0, 1} @@ -67,7 +68,7 @@ SyncServer::Entry::AttachPool(ContextPool *pool) m_AttachedPool = pool; } -systems::Receipt +Receipt SyncServer::Allocate() { auto &entry = AllocateEntry(); diff --git a/aster/src/aster/util/files.cpp b/aster/src/aster/util/files.cpp index 2ba186d..c440df6 100644 --- a/aster/src/aster/util/files.cpp +++ b/aster/src/aster/util/files.cpp @@ -5,8 +5,10 @@ #include "aster/util/files.h" +using namespace aster; + eastl::vector -ReadFile(std::string_view fileName) +aster::ReadFile(std::string_view fileName) { FILE *filePtr = fopen(fileName.data(), "rb"); @@ -32,7 +34,7 @@ ReadFile(std::string_view fileName) } eastl::vector -ReadFileBytes(std::string_view fileName, bool errorOnFail) +aster::ReadFileBytes(std::string_view fileName, bool errorOnFail) { FILE *filePtr = fopen(fileName.data(), "rb"); @@ -61,7 +63,7 @@ ReadFileBytes(std::string_view fileName, bool errorOnFail) } bool -WriteFileBytes(std::string_view fileName, eastl::span const data) +aster::WriteFileBytes(std::string_view fileName, eastl::span const data) { FILE *filePtr = fopen(fileName.data(), "wb"); diff --git a/aster/src/aster/util/logger.cpp b/aster/src/aster/util/logger.cpp index 953f4ee..2ec04d4 100644 --- a/aster/src/aster/util/logger.cpp +++ b/aster/src/aster/util/logger.cpp @@ -5,7 +5,7 @@ #include "aster/util/logger.h" -auto g_Logger = Logger(); +auto g_Logger = aster::Logger(); // ReSharper disable once CppInconsistentNaming /* Credits to Const-me */ diff --git a/samples/00_util/CMakeLists.txt b/samples/00_util/CMakeLists.txt index ba3fbed..30ffc81 100644 --- a/samples/00_util/CMakeLists.txt +++ b/samples/00_util/CMakeLists.txt @@ -5,10 +5,10 @@ cmake_minimum_required(VERSION 3.13) find_package(imgui CONFIG REQUIRED) add_library(util_helper STATIC - "helpers.h" - "helpers.cpp" - "frame.cpp" - "frame.h" + + + + "gui.cpp" "gui.h") diff --git a/samples/00_util/frame.cpp b/samples/00_util/frame.cpp deleted file mode 100644 index 5e93df6..0000000 --- a/samples/00_util/frame.cpp +++ /dev/null @@ -1,174 +0,0 @@ -// ============================================= -// Aster: frame.cpp -// Copyright (c) 2020-2025 Anish Bhobe -// ============================================= - -#include "frame.h" - -#include "aster/core/device.h" -#include "aster/core/swapchain.h" - -#include "helpers.h" - -Frame::Frame(const Device *device, const u32 queueFamilyIndex, const u32 frameCount) - : m_FrameIdx(frameCount) - , m_ImageIdx(0) -{ - m_Device = device; - - eastl::fixed_string name = "Frame "; - name += static_cast('0' + frameCount); - const vk::CommandPoolCreateInfo commandPoolCreateInfo = { - .flags = vk::CommandPoolCreateFlagBits::eTransient, - .queueFamilyIndex = queueFamilyIndex, - }; - AbortIfFailedMV(device->m_Device.createCommandPool(&commandPoolCreateInfo, nullptr, &m_Pool), - "Could not command pool for frame {}", frameCount); - - constexpr vk::FenceCreateInfo fenceCreateInfo = {.flags = vk::FenceCreateFlagBits::eSignaled}; - AbortIfFailedMV(device->m_Device.createFence(&fenceCreateInfo, nullptr, &m_FrameAvailableFence), - "Could not create a fence for frame {}", frameCount); - - constexpr vk::SemaphoreCreateInfo semaphoreCreateInfo = {}; - AbortIfFailedMV(device->m_Device.createSemaphore(&semaphoreCreateInfo, nullptr, &m_ImageAcquireSem), - "Could not create IA semaphore for frame {}.", frameCount); - AbortIfFailedMV(device->m_Device.createSemaphore(&semaphoreCreateInfo, nullptr, &m_RenderFinishSem), - "Could not create RF semaphore for frame {}.", frameCount); - - const vk::CommandBufferAllocateInfo allocateInfo = { - .commandPool = m_Pool, - .level = vk::CommandBufferLevel::ePrimary, - .commandBufferCount = 1, - }; - - AbortIfFailed(m_Device->m_Device.allocateCommandBuffers(&allocateInfo, &m_CommandBuffer)); - - device->SetName(m_Pool, name.c_str()); - device->SetName(m_FrameAvailableFence, name.c_str()); - device->SetName(m_ImageAcquireSem, name.c_str()); - device->SetName(m_RenderFinishSem, name.c_str()); - device->SetName(m_CommandBuffer, name.c_str()); - - DEBUG("Frame {} created successfully.", frameCount); -} - -void -Frame::Present(const vk::Queue commandQueue, Swapchain *swapchain, const Surface *surface, Size2D size) -{ - - vk::PresentInfoKHR presentInfo = { - .waitSemaphoreCount = 1, - .pWaitSemaphores = &m_RenderFinishSem, - .swapchainCount = 1, - .pSwapchains = &swapchain->m_Swapchain, - .pImageIndices = &m_ImageIdx, - .pResults = nullptr, - }; - switch (auto result = commandQueue.presentKHR(&presentInfo)) - { - case vk::Result::eSuccess: - break; - case vk::Result::eErrorOutOfDateKHR: - case vk::Result::eSuboptimalKHR: - DEBUG("Recreating Swapchain. Cause: {}", result); - swapchain->Create(*surface, size); - break; // Present failed. We do nothing. Frame is skipped. - default: - AbortIfFailedM(result, "Swapchain Present failed."); - } -} - -Frame::~Frame() -{ - m_Device->m_Device.destroy(m_RenderFinishSem, nullptr); - m_Device->m_Device.destroy(m_ImageAcquireSem, nullptr); - m_Device->m_Device.destroy(m_FrameAvailableFence, nullptr); - m_Device->m_Device.destroy(m_Pool, nullptr); - - DEBUG("Destoryed Frame"); -} - -Frame::Frame(Frame &&other) noexcept - : m_Device(other.m_Device) - , m_Pool(Take(other.m_Pool)) - , m_CommandBuffer(Take(other.m_CommandBuffer)) - , m_FrameAvailableFence(Take(other.m_FrameAvailableFence)) - , m_ImageAcquireSem(Take(other.m_ImageAcquireSem)) - , m_RenderFinishSem(Take(other.m_RenderFinishSem)) - , m_FrameIdx(other.m_FrameIdx) - , m_ImageIdx(other.m_ImageIdx) -{ -} - -Frame & -Frame::operator=(Frame &&other) noexcept -{ - if (this == &other) - return *this; - m_Device = other.m_Device; - m_Pool = Take(other.m_Pool); - m_CommandBuffer = Take(other.m_CommandBuffer); - m_FrameAvailableFence = Take(other.m_FrameAvailableFence); - m_ImageAcquireSem = Take(other.m_ImageAcquireSem); - m_RenderFinishSem = Take(other.m_RenderFinishSem); - m_FrameIdx = other.m_FrameIdx; - m_ImageIdx = other.m_ImageIdx; - return *this; -} - -// Frame Manager - -FrameManager::FrameManager(const Device *device, u32 queueFamilyIndex, u32 framesInFlight) - : m_Device(device) - , m_FramesInFlight(framesInFlight) -{ - for (u32 i = 0; i < framesInFlight; ++i) - { - m_Frames.emplace_back(device, queueFamilyIndex, i); - } -} - -Frame * -FrameManager::GetNextFrame(Swapchain *swapchain, const Surface *surface, Size2D size) -{ - - Frame *currentFrame = &m_Frames[m_CurrentFrameIdx]; - u32 frameIndex = m_CurrentFrameIdx; - - m_CurrentFrameIdx = (m_CurrentFrameIdx + 1) % m_FramesInFlight; - - AbortIfFailedMV(m_Device->m_Device.waitForFences(1, ¤tFrame->m_FrameAvailableFence, true, MaxValue), - "Waiting for fence {} failed.", frameIndex); - - u32 imageIndex = 0; - bool imageAcquired = false; - while (!imageAcquired) - { - auto result = m_Device->m_Device.acquireNextImageKHR(swapchain->m_Swapchain, MaxValue, - currentFrame->m_ImageAcquireSem, nullptr, &imageIndex); - switch (result) - { - case vk::Result::eSuccess: - case vk::Result::eSuboptimalKHR: // Suboptimal can still render. Better to let this go for semaphores etc. - imageAcquired = true; - break; // Image acquired. Break out of loop. - case vk::Result::eErrorOutOfDateKHR: - DEBUG("Recreating Swapchain. Cause: {}", result); - swapchain->Create(*surface, size); - break; // Image acquire has failed. We move to the next frame. - default: - AbortIfFailedMV(result, "Waiting for swapchain image {} failed.", frameIndex); - } - } - - // Reset fences here. In case swapchain was out of date, we leave the fences signalled. - AbortIfFailedMV(m_Device->m_Device.resetFences(1, ¤tFrame->m_FrameAvailableFence), "Fence {} reset failed.", - frameIndex); - - AbortIfFailedMV(m_Device->m_Device.resetCommandPool(currentFrame->m_Pool, {}), "Command pool {} reset failed.", - frameIndex); - - currentFrame->m_ImageIdx = imageIndex; - - return currentFrame; -} \ No newline at end of file diff --git a/samples/00_util/frame.h b/samples/00_util/frame.h deleted file mode 100644 index 7466091..0000000 --- a/samples/00_util/frame.h +++ /dev/null @@ -1,55 +0,0 @@ -// ============================================= -// Aster: frame.h -// Copyright (c) 2020-2025 Anish Bhobe -// ============================================= - -#pragma once - -#include "aster/aster.h" -#include "helpers.h" - -#include "aster/core/size.h" - -#include - -struct Device; -struct Window; -struct Swapchain; -struct Surface; - -struct Frame -{ - // Persistent - const Device *m_Device; - vk::CommandPool m_Pool; - vk::CommandBuffer m_CommandBuffer; - vk::Fence m_FrameAvailableFence; - vk::Semaphore m_ImageAcquireSem; - vk::Semaphore m_RenderFinishSem; - u32 m_FrameIdx; - - // Transient - u32 m_ImageIdx; - - void Present(vk::Queue commandQueue, Swapchain *swapchain, const Surface *surface, Size2D size); - - Frame(const Device *device, u32 queueFamilyIndex, u32 frameCount); - ~Frame(); - - Frame(Frame &&other) noexcept; - Frame &operator=(Frame &&other) noexcept; - - DISALLOW_COPY_AND_ASSIGN(Frame); -}; - -struct FrameManager -{ - const Device *m_Device; - eastl::fixed_vector m_Frames{}; - u32 m_CurrentFrameIdx = 0; - u32 m_FramesInFlight = 0; - - FrameManager(const Device *device, u32 queueFamilyIndex, u32 framesInFlight); - - Frame *GetNextFrame(Swapchain *swapchain, const Surface *surface, Size2D size); -}; \ No newline at end of file diff --git a/samples/00_util/gui.cpp b/samples/00_util/gui.cpp index a25cf4b..0da524c 100644 --- a/samples/00_util/gui.cpp +++ b/samples/00_util/gui.cpp @@ -5,11 +5,7 @@ #include "gui.h" -#include "aster/core/device.h" -#include "aster/core/instance.h" -#include "aster/core/window.h" -#include "aster/systems/rendering_device.h" -#include "helpers.h" +#include "aster/aster.h" #include #include @@ -27,8 +23,10 @@ VulkanAssert(VkResult result) } void -Init(systems::RenderingDevice &device, Window &window) +Init(aster::RenderingDevice &device, aster::Window &window) { + using namespace aster; + g_AttachmentFormat = device.m_Swapchain.m_Format; eastl::vector poolSizes = { @@ -93,72 +91,7 @@ Init(systems::RenderingDevice &device, Window &window) } void -Init(Instance const *context, Device const *device, Window const *window, vk::Format attachmentFormat, - u32 const imageCount, u32 const queueFamily, vk::Queue const queue) -{ - g_AttachmentFormat = attachmentFormat; - - eastl::vector poolSizes = { - {vk::DescriptorType::eSampler, 1000}, - {vk::DescriptorType::eCombinedImageSampler, 1000}, - {vk::DescriptorType::eSampledImage, 1000}, - {vk::DescriptorType::eStorageImage, 1000}, - {vk::DescriptorType::eUniformTexelBuffer, 1000}, - {vk::DescriptorType::eStorageTexelBuffer, 1000}, - {vk::DescriptorType::eUniformBuffer, 1000}, - {vk::DescriptorType::eStorageBuffer, 1000}, - {vk::DescriptorType::eUniformBufferDynamic, 1000}, - {vk::DescriptorType::eStorageBufferDynamic, 1000}, - {vk::DescriptorType::eInputAttachment, 1000}, - }; - - vk::DescriptorPoolCreateInfo const descriptorPoolCreateInfo = { - .flags = vk::DescriptorPoolCreateFlagBits::eFreeDescriptorSet, - .maxSets = 1000, - .poolSizeCount = static_cast(poolSizes.size()), - .pPoolSizes = poolSizes.data(), - }; - - AbortIfFailed(device->m_Device.createDescriptorPool(&descriptorPoolCreateInfo, nullptr, &g_DescriptorPool)); - - IMGUI_CHECKVERSION(); - CreateContext(); - ImGuiIO &io = GetIO(); - (void)io; - // io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; - // io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Viewports bad - - StyleColorsDark(); - - ImGui_ImplGlfw_InitForVulkan(window->m_Window, true); - - vk::PipelineRenderingCreateInfo renderingCreateInfo = { - .colorAttachmentCount = 1, - .pColorAttachmentFormats = &g_AttachmentFormat, - }; - - ImGui_ImplVulkan_InitInfo imguiVulkanInitInfo = { - .Instance = context->m_Instance, - .PhysicalDevice = device->m_PhysicalDevice, - .Device = device->m_Device, - .QueueFamily = queueFamily, - .Queue = queue, - .DescriptorPool = g_DescriptorPool, - .MinImageCount = imageCount, - .ImageCount = imageCount, - .PipelineCache = nullptr, - .UseDynamicRendering = true, - .PipelineRenderingCreateInfo = renderingCreateInfo, - .Allocator = nullptr, - .CheckVkResultFn = VulkanAssert, - }; - ImGui_ImplVulkan_Init(&imguiVulkanInitInfo); - - ImGui_ImplVulkan_CreateFontsTexture(); -} - -void -Destroy(systems::RenderingDevice const &device) +Destroy(aster::RenderingDevice const &device) { ImGui_ImplVulkan_Shutdown(); ImGui_ImplGlfw_Shutdown(); @@ -167,16 +100,6 @@ Destroy(systems::RenderingDevice const &device) device.m_Device->destroy(Take(g_DescriptorPool), nullptr); } -void -Destroy(Device const *device) -{ - ImGui_ImplVulkan_Shutdown(); - ImGui_ImplGlfw_Shutdown(); - DestroyContext(); - - device->m_Device.destroy(Take(g_DescriptorPool), nullptr); -} - void StartBuild() { @@ -277,7 +200,7 @@ Draw(vk::CommandBuffer const commandBuffer, vk::Extent2D const extent, vk::Image } void -Draw(systems::Frame &frame, systems::GraphicsContext &context) +Draw(aster::Frame &frame, aster::GraphicsContext &context) { context.BeginDebugRegion("UI Pass", {0.9f, 0.9f, 1.0f, 1.0f}); diff --git a/samples/00_util/gui.h b/samples/00_util/gui.h index 04673e8..3eb61af 100644 --- a/samples/00_util/gui.h +++ b/samples/00_util/gui.h @@ -10,13 +10,12 @@ #include +namespace aster +{ struct Device; struct Instance; struct Window; struct Swapchain; - -namespace systems -{ class RenderingDevice; class GraphicsContext; struct Frame; @@ -25,17 +24,13 @@ struct Frame; // ReSharper disable once CppInconsistentNaming namespace ImGui { -void Init(systems::RenderingDevice &device, Window &window); -void Init(const Instance *context, const Device *device, const Window *window, vk::Format attachmentFormat, - u32 imageCount, u32 queueFamily, vk::Queue queue); -void Destroy(const systems::RenderingDevice &device); -void Destroy(const Device *device); +void Init(aster::RenderingDevice &device, aster::Window &window); +void Destroy(const aster::RenderingDevice &device); void Recreate(); void StartBuild(); void EndBuild(); -void Draw(vk::CommandBuffer commandBuffer, vk::Extent2D extent, vk::ImageView view); -void Draw(systems::Frame &frame, systems::GraphicsContext &context); +void Draw(aster::Frame &frame, aster::GraphicsContext &context); void PushDisable(); void PopDisable(); diff --git a/samples/00_util/helpers.cpp b/samples/00_util/helpers.cpp deleted file mode 100644 index 5b13b06..0000000 --- a/samples/00_util/helpers.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// ============================================= -// Aster: helpers.cpp -// Copyright (c) 2020-2025 Anish Bhobe -// ============================================= - -#include "helpers.h" - -#include "aster/core/device.h" -#include "aster/core/physical_device.h" - -#include - -constexpr QueueSupportFlags REQUIRED_QUEUE_SUPPORT = QueueSupportFlags{} | QueueSupportFlagBits::eGraphics | - QueueSupportFlagBits::eCompute | QueueSupportFlagBits::ePresent | - QueueSupportFlagBits::eTransfer; - -bool -IsSuitableDevice(PhysicalDevice const *physicalDevice) -{ - bool const hasAllRequiredQueues = - std::ranges::any_of(physicalDevice->m_QueueFamilies, [](auto const &queueFamilyProp) { - return (queueFamilyProp.m_Support & REQUIRED_QUEUE_SUPPORT) == REQUIRED_QUEUE_SUPPORT; - }); - - bool const isNotCpu = physicalDevice->m_DeviceProperties.deviceType != vk::PhysicalDeviceType::eCpu; - - bool const hasPresentMode = !physicalDevice->m_PresentModes.empty(); - - bool const hasSurfaceFormat = !physicalDevice->m_SurfaceFormats.empty(); - - return hasSurfaceFormat && hasPresentMode && isNotCpu && hasAllRequiredQueues; -} - -PhysicalDevice -FindSuitableDevice(PhysicalDevices const &physicalDevices) -{ - for (auto &physicalDevice : physicalDevices) - { - if (IsSuitableDevice(&physicalDevice)) - { - return physicalDevice; - } - } - - ERROR("No suitable GPU available on the system.") - THEN_ABORT(vk::Result::eErrorUnknown); -} - -QueueAllocation -FindAppropriateQueueAllocation(PhysicalDevice const *physicalDevice) -{ - for (auto &queueFamilyInfo : physicalDevice->m_QueueFamilies) - { - if ((queueFamilyInfo.m_Support & REQUIRED_QUEUE_SUPPORT) == REQUIRED_QUEUE_SUPPORT) - { - return { - .m_Family = queueFamilyInfo.m_Index, - .m_Count = queueFamilyInfo.m_Count, - }; - } - } - ERROR("No suitable queue family on the GPU.") - THEN_ABORT(vk::Result::eErrorUnknown); -} \ No newline at end of file diff --git a/samples/00_util/helpers.h b/samples/00_util/helpers.h deleted file mode 100644 index 0ef08ed..0000000 --- a/samples/00_util/helpers.h +++ /dev/null @@ -1,46 +0,0 @@ -// ============================================= -// Aster: helpers.h -// Copyright (c) 2020-2025 Anish Bhobe -// ============================================= - -#pragma once - -#include "aster/aster.h" - -#include "aster/core/queue_allocation.h" - -#include "EASTL/span.h" -#include -#include - -struct PhysicalDevice; -class PhysicalDevices; - -PhysicalDevice FindSuitableDevice(const PhysicalDevices &physicalDevices); -QueueAllocation FindAppropriateQueueAllocation(const PhysicalDevice *physicalDevice); - -template -using StackString = eastl::fixed_string; - -#define AbortIfFailed(RESULT) \ - do \ - { \ - vk::Result _checkResultValue_; \ - ERROR_IF(Failed(_checkResultValue_ = static_cast(RESULT)), "Cause: {}", _checkResultValue_) \ - THEN_ABORT(_checkResultValue_); \ - } while (false) - -#define AbortIfFailedMV(RESULT, MSG, EXTRA) \ - do \ - { \ - vk::Result _checkResultValue_; \ - ERROR_IF(Failed(_checkResultValue_ = static_cast(RESULT)), MSG " Cause: {}", EXTRA, _checkResultValue_) \ - THEN_ABORT(_checkResultValue_); \ - } while (false) - -#define AbortIfFailedM(RESULT, MSG) \ - do \ - { \ - auto _checkResultValue_ = static_cast(RESULT); \ - ERROR_IF(Failed(_checkResultValue_), MSG " Cause: {}", _checkResultValue_) THEN_ABORT(_checkResultValue_); \ - } while (false) \ No newline at end of file diff --git a/samples/01_triangle/triangle.cpp b/samples/01_triangle/triangle.cpp index 5001890..0dd9fe6 100644 --- a/samples/01_triangle/triangle.cpp +++ b/samples/01_triangle/triangle.cpp @@ -4,19 +4,9 @@ // ============================================= #include "aster/aster.h" +#include "aster/import_types.h" -#include "aster/core/buffer.h" -#include "aster/core/constants.h" -#include "aster/core/instance.h" -#include "aster/core/physical_device.h" -#include "aster/core/pipeline.h" -#include "aster/core/swapchain.h" -#include "aster/core/window.h" - -#include "aster/core/pipeline.h" -#include "aster/systems/rendering_device.h" #include "aster/util/files.h" -#include "helpers.h" #include @@ -27,19 +17,19 @@ struct Vertex vec3 m_Position; vec3 m_Color; - static eastl::vector + static eastl::vector GetAttributes() { return { { .m_Location = 0, .m_Offset = offsetof(Vertex, m_Position), - .m_Format = systems::AttributeInfo::Format::eFloat32X3, + .m_Format = aster::AttributeInfo::Format::eFloat32X3, }, { .m_Location = 1, .m_Offset = offsetof(Vertex, m_Color), - .m_Format = systems::AttributeInfo::Format::eFloat32X3, + .m_Format = aster::AttributeInfo::Format::eFloat32X3, }, }; } @@ -48,10 +38,12 @@ struct Vertex int main(int, char **) { + using namespace aster; + MIN_LOG_LEVEL(Logger::LogType::eInfo); Window window = {"Triangle (Aster)", {640, 480}}; - systems::RenderingDevice device{{ + RenderingDevice device{{ .m_Window = window, .m_Features = {.m_Vulkan12Features = {.bufferDeviceAddress = true}, .m_Vulkan13Features = {.synchronization2 = true, .dynamicRendering = true}}, @@ -126,7 +118,7 @@ main(int, char **) INFO("Starting loop"); while (window.Poll()) { - systems::Frame ¤tFrame = device.GetNextFrame(); + aster::Frame ¤tFrame = device.GetNextFrame(); Size2D swapchainSize = currentFrame.m_SwapchainSize; diff --git a/samples/02_box/box.cpp b/samples/02_box/box.cpp index 97d9c46..516090c 100644 --- a/samples/02_box/box.cpp +++ b/samples/02_box/box.cpp @@ -25,6 +25,8 @@ constexpr auto VERTEX_SHADER_FILE = "shader/box.vs.hlsl.spv"; constexpr auto FRAGMENT_SHADER_FILE = "shader/box.ps.hlsl.spv"; constexpr auto SHADER_FILE = "box"; +using namespace aster; + struct ImageFile { void *m_Data = nullptr; @@ -117,7 +119,7 @@ main(int, char **) .m_Vulkan13Features = {.synchronization2 = true, .dynamicRendering = true}, }; - systems::RenderingDevice device{{ + RenderingDevice device{{ .m_Window = window, .m_Features = enabledDeviceFeatures, .m_AppName = "Box", @@ -332,11 +334,11 @@ main(int, char **) { uptr m_VertexBuffer; uptr m_Camera; - systems::ResId m_Texture; + ResId m_Texture; }; static_assert(sizeof(PCB) == 24); - auto &commitManager = systems::CommitManager::Instance(); + auto &commitManager = CommitManager::Instance(); PCB pcb = { .m_VertexBuffer = vbo->GetDeviceAddress(), diff --git a/samples/03_model_render/asset_loader.cpp b/samples/03_model_render/asset_loader.cpp index 11f110c..4ee3cda 100644 --- a/samples/03_model_render/asset_loader.cpp +++ b/samples/03_model_render/asset_loader.cpp @@ -8,7 +8,6 @@ #include "aster/core/image.h" #include "asset_loader.h" -#include "helpers.h" #include "aster/systems/commit_manager.h" #include "aster/systems/rendering_device.h" @@ -27,6 +26,8 @@ #undef LoadImage #endif +using namespace aster; + constexpr vk::CommandBufferBeginInfo OneTimeCmdBeginInfo = {.flags = vk::CommandBufferUsageFlagBits::eOneTimeSubmit}; vec4 @@ -140,7 +141,7 @@ AssetLoader::LoadHdrImage(cstr path, cstr name) const auto context = m_Device->CreateTransferContext(); context.Begin(); - StackString<128> loadActionName = "Load: "; + eastl::fixed_string loadActionName = "Load: "; loadActionName += name ? name : path; context.BeginDebugRegion(loadActionName.c_str()); @@ -161,7 +162,7 @@ AssetLoader::LoadHdrImage(cstr path, cstr name) const } void -GenerateMipMaps(systems::TransferContext &context, Ref const &texture, vk::ImageLayout initialLayout, +GenerateMipMaps(TransferContext &context, Ref const &texture, vk::ImageLayout initialLayout, vk::ImageLayout finalLayout, vk::PipelineStageFlags2 prevStage, vk::PipelineStageFlags2 finalStage) { #if !defined(ASTER_NDEBUG) @@ -330,8 +331,8 @@ GenerateMipMaps(systems::TransferContext &context, Ref const &texture, #endif } -systems::ResId -AssetLoader::LoadImageToGpu(systems::TransferContext &context, tinygltf::Image *image, bool isSrgb, cstr name) const +ResId +AssetLoader::LoadImageToGpu(TransferContext &context, tinygltf::Image *image, bool isSrgb, cstr name) const { // TODO(Something not loading properly). @@ -358,7 +359,7 @@ AssetLoader::LoadImageToGpu(systems::TransferContext &context, tinygltf::Image * .m_IsStorage = false, }); - StackString<128> loadActionName = "Load: "; + eastl::fixed_string loadActionName = "Load: "; loadActionName += assignedName; context.BeginDebugRegion(loadActionName.c_str()); @@ -467,11 +468,11 @@ AssetLoader::LoadModelToGpu(cstr path, cstr name) context.Begin(); - StackString<128> loadActionName = "Load: "; + eastl::fixed_string loadActionName = "Load: "; loadActionName += name ? name : path; context.BeginDebugRegion(loadActionName.c_str()); - eastl::hash_map> textureHandleMap; + eastl::hash_map> textureHandleMap; eastl::vector materials; Ref materialsBuffer; @@ -480,10 +481,10 @@ AssetLoader::LoadModelToGpu(cstr path, cstr name) { // TODO("Something broken on load here."); auto getTextureHandle = [this, &context, &textureHandleMap, - &model](i32 index, bool const isSrgb) -> systems::ResId { + &model](i32 index, bool const isSrgb) -> ResId { if (index < 0) { - return systems::NullId{}; + return NullId{}; } if (auto const iter = textureHandleMap.find(index); iter != textureHandleMap.end()) { @@ -804,8 +805,8 @@ AssetLoader::LoadModelToGpu(cstr path, cstr name) nodeBuffer->Write(0, nodes.GetGlobalTransformByteSize(), nodes.GetGlobalTransformPtr()); #pragma region Staging / Transfer / Uploads - systems::ResId positionBufferHandle = systems::ResId::Null(); - systems::ResId vertexDataHandle = systems::ResId::Null(); + ResId positionBufferHandle = ResId::Null(); + ResId vertexDataHandle = ResId::Null(); Ref indexBuffer; auto positionBuffer = m_Device->CreateStorageBuffer(vertexPositions.size() * sizeof vertexPositions[0]); @@ -815,7 +816,7 @@ AssetLoader::LoadModelToGpu(cstr path, cstr name) context.UploadBuffer(vertexDataBuffer, vertexData); // TODO: Index buffer needs to be separated. - indexBuffer = systems::CastBuffer( + indexBuffer = CastBuffer( m_Device->CreateIndexBuffer(indices.size() * sizeof indices[0], "Index Buffer")); context.UploadBuffer(indexBuffer, indices); @@ -839,7 +840,7 @@ AssetLoader::LoadModelToGpu(cstr path, cstr name) auto handlesBuffer = m_Device->CreateStorageBuffer(sizeof handlesData, "Materials"); handlesBuffer->Write(0, sizeof handlesData, &handlesData); - eastl::vector> textureHandles; + eastl::vector> textureHandles; textureHandles.reserve(textureHandleMap.size()); for (auto &[key, val] : textureHandleMap) @@ -852,7 +853,7 @@ AssetLoader::LoadModelToGpu(cstr path, cstr name) }; } -Model::Model(eastl::vector> &textureHandles, Nodes &&nodes, Ref nodeBuffer, +Model::Model(eastl::vector> &textureHandles, Nodes &&nodes, Ref nodeBuffer, ModelHandles &handles, Ref modelHandlesBuffer, Ref indexBuffer, eastl::vector const &meshPrimitives) : m_TextureHandles(std::move(textureHandles)) @@ -886,7 +887,7 @@ Model::Update() } } -AssetLoader::AssetLoader(systems::RenderingDevice &device) +AssetLoader::AssetLoader(RenderingDevice &device) : m_Device{&device} { } \ No newline at end of file diff --git a/samples/03_model_render/asset_loader.h b/samples/03_model_render/asset_loader.h index 6878290..313ab19 100644 --- a/samples/03_model_render/asset_loader.h +++ b/samples/03_model_render/asset_loader.h @@ -13,12 +13,7 @@ #include "nodes.h" #include "tiny_gltf.h" -namespace systems -{ -class TransferContext; -} - -namespace systems +namespace aster { class RenderingDevice; class ResourceManager; @@ -26,6 +21,9 @@ class SamplerManager; class BufferManager; class ImageManager; class CommitManager; +class TransferContext; +struct Image; +struct Texture; } // namespace systems namespace tinygltf @@ -33,9 +31,6 @@ namespace tinygltf struct Image; } -struct Image; -struct Texture; - constexpr auto GLTF_ASCII_FILE_EXTENSION = ".gltf"; constexpr auto GLTF_BINARY_FILE_EXTENSION = ".glb"; @@ -52,11 +47,11 @@ struct Material { vec4 m_AlbedoFactor; // 16 16 vec4 m_EmissionFactor; // 16 32 - systems::ResId m_AlbedoTex; // 08 40 - systems::ResId m_NormalTex; // 08 48 - systems::ResId m_MetalRoughTex; // 08 56 - systems::ResId m_OcclusionTex; // 08 64 - systems::ResId m_EmissionTex; // 08 72 + aster::ResId m_AlbedoTex; // 08 40 + aster::ResId m_NormalTex; // 08 48 + aster::ResId m_MetalRoughTex; // 08 56 + aster::ResId m_OcclusionTex; // 08 64 + aster::ResId m_EmissionTex; // 08 72 f32 m_MetalFactor; // 04 76 f32 m_RoughFactor; // 04 80 }; @@ -71,7 +66,7 @@ struct VertexData struct Model { - eastl::vector> m_TextureHandles; + eastl::vector> m_TextureHandles; Nodes m_Nodes; struct ModelHandlesData @@ -84,10 +79,10 @@ struct Model struct ModelHandles { - Ref m_VertexPositionHandle; - Ref m_VertexDataHandle; - Ref m_MaterialsHandle; - Ref m_NodeHandle; + aster::Ref m_VertexPositionHandle; + aster::Ref m_VertexDataHandle; + aster::Ref m_MaterialsHandle; + aster::Ref m_NodeHandle; operator ModelHandlesData() const { @@ -100,17 +95,17 @@ struct Model } } m_Handles; - Ref m_NodeBuffer; - Ref m_IndexBuffer; - Ref m_ModelHandlesBuffer; + aster::Ref m_NodeBuffer; + aster::Ref m_IndexBuffer; + aster::Ref m_ModelHandlesBuffer; eastl::vector m_MeshPrimitives; [[nodiscard]] mat4 const &GetModelTransform() const; void SetModelTransform(mat4 const &transform); void Update(); - Model(eastl::vector> &textureHandles, Nodes &&nodes, Ref nodeBuffer, - ModelHandles &handles, Ref modelHandlesBuffer, Ref indexBuffer, + Model(eastl::vector> &textureHandles, Nodes &&nodes, aster::Ref nodeBuffer, + ModelHandles &handles, aster::Ref modelHandlesBuffer, aster::Ref indexBuffer, eastl::vector const &meshPrimitives); ~Model() = default; @@ -123,9 +118,9 @@ struct Model struct AssetLoader { - systems::RenderingDevice *m_Device; + aster::RenderingDevice *m_Device; - Ref LoadHdrImage(cstr path, cstr name = nullptr) const; + aster::Ref LoadHdrImage(cstr path, cstr name = nullptr) const; Model LoadModelToGpu(cstr path, cstr name = nullptr); constexpr static auto ANormal = "NORMAL"; @@ -137,32 +132,32 @@ struct AssetLoader constexpr static auto AJoints0 = "JOINTS_0"; constexpr static auto AWeights0 = "WEIGHTS_0"; - explicit AssetLoader(systems::RenderingDevice &device); + explicit AssetLoader(aster::RenderingDevice &device); private: - systems::ResId - LoadImageToGpu(systems::TransferContext &context, tinygltf::Image *image, bool isSrgb, cstr name = nullptr) const; + aster::ResId + LoadImageToGpu(aster::TransferContext &context, tinygltf::Image *image, bool isSrgb, cstr name = nullptr) const; }; void -GenerateMipMaps(systems::TransferContext &context, Ref const &textureView, vk::ImageLayout initialLayout, +GenerateMipMaps(aster::TransferContext &context, aster::Ref const &textureView, vk::ImageLayout initialLayout, vk::ImageLayout finalLayout, vk::PipelineStageFlags2 prevStage, vk::PipelineStageFlags2 finalStage); void -GenerateMipMaps(systems::TransferContext &context, concepts::ImageRefTo auto &texture, +GenerateMipMaps(aster::TransferContext &context, aster::concepts::ImageRefTo auto &texture, vk::ImageLayout initialLayout, vk::ImageLayout finalLayout, vk::PipelineStageFlags2 prevStage = vk::PipelineStageFlagBits2::eAllCommands, vk::PipelineStageFlags2 finalStage = vk::PipelineStageFlagBits2::eAllCommands) { - GenerateMipMaps(context, systems::CastImage(texture), initialLayout, finalLayout, prevStage, finalStage); + GenerateMipMaps(context, aster::CastImage(texture), initialLayout, finalLayout, prevStage, finalStage); } void -GenerateMipMaps(systems::TransferContext &context, concepts::ViewRefTo auto &texture, +GenerateMipMaps(aster::TransferContext &context, aster::concepts::ViewRefTo auto &texture, vk::ImageLayout initialLayout, vk::ImageLayout finalLayout, vk::PipelineStageFlags2 prevStage = vk::PipelineStageFlagBits2::eAllCommands, vk::PipelineStageFlags2 finalStage = vk::PipelineStageFlagBits2::eAllCommands) { - GenerateMipMaps(context, systems::CastImage(texture->m_Image), initialLayout, finalLayout, prevStage, + GenerateMipMaps(context, aster::CastImage(texture->m_Image), initialLayout, finalLayout, prevStage, finalStage); } \ No newline at end of file diff --git a/samples/03_model_render/ibl_helpers.cpp b/samples/03_model_render/ibl_helpers.cpp index 050c1db..11bb687 100644 --- a/samples/03_model_render/ibl_helpers.cpp +++ b/samples/03_model_render/ibl_helpers.cpp @@ -9,7 +9,6 @@ #include "aster/core/image.h" #include "asset_loader.h" -#include "helpers.h" #include "aster/systems/commit_manager.h" #include "aster/systems/rendering_device.h" @@ -23,10 +22,12 @@ constexpr auto DIFFUSE_IRRADIANCE_ENTRY = "diffuseIrradiance"; constexpr auto PREFILTER_ENTRY = "prefilter"; constexpr auto BRDF_LUT_ENTRY = "brdfLut"; +using namespace aster; + Environment -CreateCubeFromHdrEnv(AssetLoader &assetLoader, u32 const cubeSide, systems::ResId hdrEnv) +CreateCubeFromHdrEnv(AssetLoader &assetLoader, u32 const cubeSide, ResId hdrEnv) { - systems::RenderingDevice &device = *assetLoader.m_Device; + RenderingDevice &device = *assetLoader.m_Device; auto *commitManager = device.m_CommitManager.get(); auto skybox = device.CreateTextureCubeWithView({ @@ -62,12 +63,12 @@ CreateCubeFromHdrEnv(AssetLoader &assetLoader, u32 const cubeSide, systems::ResI }); auto prefilterHandle = commitManager->CommitTexture(prefilterCube); // This stores the original view for us. constexpr u32 prefilterMipCountMax = 6; - eastl::fixed_vector, prefilterMipCountMax> prefilterStorageHandles; + eastl::fixed_vector, prefilterMipCountMax> prefilterStorageHandles; // All non-owning copies. for (u8 mipLevel = 0; mipLevel < prefilterMipCountMax; ++mipLevel) { auto view = device.CreateView({ - .m_Image = systems::CastImage(prefilterCube->m_Image), + .m_Image = CastImage(prefilterCube->m_Image), .m_ViewType = vk::ImageViewType::eCube, .m_AspectMask = vk::ImageAspectFlagBits::eColor, .m_MipLevelCount = 1, @@ -178,27 +179,27 @@ CreateCubeFromHdrEnv(AssetLoader &assetLoader, u32 const cubeSide, systems::ResI struct SkyboxPushConstants { - systems::ResId m_HdrEnvHandle; - systems::ResId m_OutputTexture; + ResId m_HdrEnvHandle; + ResId m_OutputTexture; u32 m_CubeSide; }; struct DiffuseIrradiancePushConstants { - systems::ResId m_SkyboxHandle; - systems::ResId m_OutputTexture; + ResId m_SkyboxHandle; + ResId m_OutputTexture; u32 m_CubeSide; }; struct PrefilterPushConstants { - systems::ResId m_SkyboxHandle; - systems::ResId m_OutputTexture; + ResId m_SkyboxHandle; + ResId m_OutputTexture; u32 m_CubeSide; f32 m_Roughness; u32 m_EnvSide; }; struct BrdfLutPushConstants { - systems::ResId m_OutputTexture; + ResId m_OutputTexture; }; #pragma region Pipeline Creation etc @@ -332,7 +333,7 @@ CreateCubeFromHdrEnv(AssetLoader &assetLoader, u32 const cubeSide, systems::ResI }; PrefilterPushConstants prefilterPushConstants = { .m_SkyboxHandle = skyboxHandle, - .m_OutputTexture = systems::NullId{}, + .m_OutputTexture = NullId{}, .m_EnvSide = cubeSide, }; BrdfLutPushConstants brdfLutPushConstants = { diff --git a/samples/03_model_render/ibl_helpers.h b/samples/03_model_render/ibl_helpers.h index 0ce616c..1addac6 100644 --- a/samples/03_model_render/ibl_helpers.h +++ b/samples/03_model_render/ibl_helpers.h @@ -6,21 +6,23 @@ #pragma once #include "aster/aster.h" -#include "aster/core/image.h" -#include "aster/core/image_view.h" -#include "aster/systems/resource.h" +#include "aster/import_types.h" +namespace aster +{ struct Pipeline; struct Texture; struct TextureCube; +} // namespace aster + struct AssetLoader; struct Environment { - systems::ResId m_Skybox; - systems::ResId m_Diffuse; - systems::ResId m_Prefilter; - systems::ResId m_BrdfLut; + aster::ResId m_Skybox; + aster::ResId m_Diffuse; + aster::ResId m_Prefilter; + aster::ResId m_BrdfLut; }; -Environment CreateCubeFromHdrEnv(AssetLoader &assetLoader, u32 cubeSide, systems::ResId hdrEnv); \ No newline at end of file +Environment CreateCubeFromHdrEnv(AssetLoader &assetLoader, u32 cubeSide, aster::ResId hdrEnv); \ No newline at end of file diff --git a/samples/03_model_render/light_manager.cpp b/samples/03_model_render/light_manager.cpp index 8fc6a6d..42d7b94 100644 --- a/samples/03_model_render/light_manager.cpp +++ b/samples/03_model_render/light_manager.cpp @@ -55,7 +55,7 @@ ToColor32(vec3 const &col) return r << 24 | g << 16 | b << 8 | a; } -LightManager::LightManager(systems::RenderingDevice &device) +LightManager::LightManager(aster::RenderingDevice &device) : m_Device{&device} , m_DirectionalLightCount{} , m_PointLightCount{} diff --git a/samples/03_model_render/light_manager.h b/samples/03_model_render/light_manager.h index 1b05bd8..da55631 100644 --- a/samples/03_model_render/light_manager.h +++ b/samples/03_model_render/light_manager.h @@ -6,20 +6,16 @@ #pragma once #include "aster/aster.h" +#include "aster/import_types.h" // TODO: Separate files so you only import handles. -#include "aster/core/buffer.h" #include "aster/systems/resource.h" #include -namespace systems +namespace aster { class RenderingDevice; -} - -namespace systems -{ class ResourceManager; class CommitManager; } // namespace systems @@ -89,9 +85,9 @@ struct LightManager u16 m_UnusedPadding0 = 0; // 02 16 }; - systems::RenderingDevice *m_Device; + aster::RenderingDevice *m_Device; eastl::vector m_Lights; - Ref m_LightBuffer; + aster::Ref m_LightBuffer; // We don't need a Directional Light free list. We will just brute force iterate. u16 m_DirectionalLightCount; @@ -114,7 +110,7 @@ struct LightManager ~LightManager() = default; - explicit LightManager(systems::RenderingDevice &device); + explicit LightManager(aster::RenderingDevice &device); LightManager(LightManager &&other) noexcept = default; LightManager &operator=(LightManager &&other) noexcept = default; diff --git a/samples/03_model_render/model_render.cpp b/samples/03_model_render/model_render.cpp index 410d7b4..8f6f6cc 100644 --- a/samples/03_model_render/model_render.cpp +++ b/samples/03_model_render/model_render.cpp @@ -133,6 +133,8 @@ struct CameraController int main(int, char **) { + using namespace aster; + MIN_LOG_LEVEL(Logger::LogType::eInfo); Window window = {"ModelRender (Aster)", {INIT_WIDTH, INIT_HEIGHT}}; @@ -168,7 +170,7 @@ main(int, char **) }; auto pipelineCacheData = ReadFileBytes(PIPELINE_CACHE_FILE, false); - systems::RenderingDevice device{{ + RenderingDevice device{{ .m_Window = window, .m_Features = enabledDeviceFeatures, .m_AppName = "ModelRender", @@ -207,8 +209,8 @@ main(int, char **) .m_ShaderFile = BACKGROUND_SHADER_FILE, .m_EntryPoints = {"vsmain", "fsmain"}, }}, - .m_DepthTest = systems::GraphicsPipelineCreateInfo::DepthTest::eReadOnly, - .m_DepthOp = systems::GraphicsPipelineCreateInfo::CompareOp::eLessThanOrEqualTo, + .m_DepthTest = GraphicsPipelineCreateInfo::DepthTest::eReadOnly, + .m_DepthOp = GraphicsPipelineCreateInfo::CompareOp::eLessThanOrEqualTo, .m_Name = "Background", })) { diff --git a/samples/03_model_render/nodes.h b/samples/03_model_render/nodes.h index b96de27..d6f0443 100644 --- a/samples/03_model_render/nodes.h +++ b/samples/03_model_render/nodes.h @@ -6,6 +6,7 @@ #pragma once #include "aster/aster.h" +#include "aster/import_types.h" #include