adding unit test CI
fixing windows build
fixing issue with descriptor pools when over 1024 images rendered
This commit is contained in:
2025-10-22 12:25:32 +02:00
committed by GitHub
29 changed files with 138231 additions and 178690 deletions
+78
View File
@@ -0,0 +1,78 @@
name: Unit tests
on:
pull_request:
push:
paths-ignore:
- '.gitignore'
- 'LICENSE'
- 'README.md'
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04]
arch: [x86_64]
runs-on: ${{ matrix.os }}
if: "!contains(github.event.head_commit.message, 'ci skip')"
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: NcStudios/VulkanCI@v1.0
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get -y install mesa-common-dev clang libsdl2-2.0-0 libsdl2-dev build-essential libvulkan-dev
# Build the lib
- name: Build MacroLibX
run: make -j DEBUG=true
# Force xmake to a specific folder (for cache)
- name: Set xmake env
run: echo "XMAKE_GLOBALDIR=${{ runner.workspace }}/xmake-global" >> $GITHUB_ENV
# Install xmake
- name: Setup xmake
if: ${{ matrix.confs.plat != 'mingw' }}
uses: xmake-io/github-action-setup-xmake@v1
with:
xmake-version: latest
actions-cache-folder: .xmake-cache-W${{ steps.cache_key.outputs.key }}
# Update xmake repository (in order to have the file that will be cached)
- name: Update xmake repository
run: xmake repo --update
# Fetch xmake dephash
- name: Retrieve dependencies hash
id: dep_hash
run: echo "hash=$(xmake l utils.ci.packageskey)" >> $GITHUB_OUTPUT
- name: Install unit tester
run: git clone https://github.com/seekrs/MacroUnitTest.git ../MacroUnitTest
# Setup compilation mode and install project dependencies
- name: Configure xmake and install dependencies
run: |
cd ../MacroUnitTest
xmake config --toolchain=clang --ccache=n --yes
# Save dependencies
- name: Save cached xmake dependencies
if: ${{ !steps.restore-depcache.outputs.cache-hit }}
uses: actions/cache/save@v4
with:
path: ${{ env.XMAKE_GLOBALDIR }}/.xmake/packages
key: ${{ steps.restore-depcache.outputs.cache-primary-key }}
- name: Build and run unit tester
run: |
cd ../MacroUnitTest
xmake run MacroUnitTest --headless --path="${{ runner.workspace }}/MacroLibX/libmlx.so"
+6
View File
@@ -38,6 +38,9 @@ GCH = runtime/Includes/PreCompiled.h.gch
CCH = runtime/Includes/PreCompiled.h.pch CCH = runtime/Includes/PreCompiled.h.pch
PCH = PCH =
# Personal path, should be overriden with env var
UNIT_TESTS_PATH = ../UnitTester/build/Bin/linux_x86_64/MacroUnitTest
NZSLC ?= nzslc NZSLC ?= nzslc
ifeq ($(TOOLCHAIN), gcc) ifeq ($(TOOLCHAIN), gcc)
@@ -161,6 +164,9 @@ clean-shaders:
shaders: clean-shaders $(SPVS) shaders: clean-shaders $(SPVS)
tests: debug
@$(UNIT_TESTS_PATH) --headless --path="./$(NAME)"
clean: clean:
@$(RM) $(OBJ_DIR) @$(RM) $(OBJ_DIR)
@printf "Cleaned $(_BOLD)$(OBJ_DIR)$(_RESET)\n" @printf "Cleaned $(_BOLD)$(OBJ_DIR)$(_RESET)\n"
+3
View File
@@ -8,6 +8,9 @@
<div align="center"> <div align="center">
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/windows.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/windows.yml/badge.svg"></a> <a href="https://github.com/seekrs/MacroLibX/actions/workflows/windows.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/windows.yml/badge.svg"></a>
</div> </div>
<div align="center">
<a href="https://github.com/seekrs/MacroLibX/actions/workflows/tests.yml"><img src="https://github.com/seekrs/MacroLibX/actions/workflows/tests.yml/badge.svg"></a>
</div>
</div> </div>
###### MacroLibX, a rewrite of 42 School's MiniLibX using SDL2 and Vulkan. ###### MacroLibX, a rewrite of 42 School's MiniLibX using SDL2 and Vulkan.
+1 -3
View File
@@ -7,9 +7,7 @@ namespace mlx
{ {
public: public:
UUID(); UUID();
UUID(std::uint64_t uuid); inline operator std::uint64_t() const noexcept { return m_uuid; }
inline operator std::uint64_t() const { return m_uuid; }
private: private:
std::uint64_t m_uuid; std::uint64_t m_uuid;
+1 -1
View File
@@ -50,7 +50,7 @@ namespace mlx
~DescriptorPoolManager() = default; ~DescriptorPoolManager() = default;
private: private:
std::vector<DescriptorPool> m_pools; std::vector<std::unique_ptr<DescriptorPool>> m_pools;
}; };
class DescriptorSet : public std::enable_shared_from_this<DescriptorSet> class DescriptorSet : public std::enable_shared_from_this<DescriptorSet>
+1 -1
View File
@@ -22,7 +22,7 @@ namespace mlx
MLX_PROFILE_FUNCTION(); MLX_PROFILE_FUNCTION();
s_instance = this; s_instance = this;
m_drop_sdl_responsability = SDL_WasInit(SDL_INIT_VIDEO); m_drop_sdl_responsability = SDL_WasInit(SDL_INIT_VIDEO) || std::getenv("MLX_HEADLESS_MODE") != nullptr;
if(m_drop_sdl_responsability) // is case the mlx is running in a sandbox like MacroUnitTester where SDL is already init if(m_drop_sdl_responsability) // is case the mlx is running in a sandbox like MacroUnitTester where SDL is already init
return; return;
SDL_SetMemoryFunctions(MemManager::Get().Malloc, MemManager::Get().Calloc, MemManager::Get().Realloc, MemManager::Get().Free); SDL_SetMemoryFunctions(MemManager::Get().Malloc, MemManager::Get().Calloc, MemManager::Get().Realloc, MemManager::Get().Free);
+9 -2
View File
@@ -7,7 +7,14 @@ namespace mlx
static std::random_device random_device; static std::random_device random_device;
static std::mt19937_64 engine(random_device()); static std::mt19937_64 engine(random_device());
static std::uniform_int_distribution<std::uint64_t> uniform_distribution; static std::uniform_int_distribution<std::uint64_t> uniform_distribution;
static std::unordered_set<std::uint64_t> registry;
UUID::UUID() : m_uuid(uniform_distribution(engine)) {} UUID::UUID()
UUID::UUID(std::uint64_t uuid) : m_uuid(uuid) {} {
do
{
m_uuid = uniform_distribution(engine);
} while(registry.contains(m_uuid));
registry.emplace(m_uuid);
}
} }
+1 -1
View File
@@ -81,7 +81,7 @@ namespace mlx
VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice()); VkCommandBuffer cmd = kvfCreateCommandBuffer(RenderCore::Get().GetDevice());
kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); kvfBeginCommandBuffer(cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
kvfCopyBufferToBuffer(cmd, m_buffer, buffer.Get(), m_size); kvfCopyBufferToBuffer(cmd, m_buffer, buffer.Get(), m_size, 0, 0);
kvfEndCommandBuffer(cmd); kvfEndCommandBuffer(cmd);
VkFence fence = kvfCreateFence(RenderCore::Get().GetDevice()); VkFence fence = kvfCreateFence(RenderCore::Get().GetDevice());
kvfSubmitSingleTimeCommandBuffer(RenderCore::Get().GetDevice(), cmd, KVF_GRAPHICS_QUEUE, fence); kvfSubmitSingleTimeCommandBuffer(RenderCore::Get().GetDevice(), cmd, KVF_GRAPHICS_QUEUE, fence);
+5 -8
View File
@@ -114,11 +114,8 @@ namespace mlx
void DescriptorPool::ReturnDescriptorSet(std::shared_ptr<DescriptorSet> set) void DescriptorPool::ReturnDescriptorSet(std::shared_ptr<DescriptorSet> set)
{ {
//std::size_t i = 0;
auto it = std::find_if(m_used_sets.begin(), m_used_sets.end(), [&](const std::shared_ptr<DescriptorSet>& rhs_set) auto it = std::find_if(m_used_sets.begin(), m_used_sets.end(), [&](const std::shared_ptr<DescriptorSet>& rhs_set)
{ {
//i++;
//std::cout << m_used_sets.size() << " " << i << std::endl;
return set == rhs_set; return set == rhs_set;
}); });
if(it == m_used_sets.end()) if(it == m_used_sets.end())
@@ -132,18 +129,18 @@ namespace mlx
MLX_PROFILE_FUNCTION(); MLX_PROFILE_FUNCTION();
for(auto& pool : m_pools) for(auto& pool : m_pools)
{ {
if(pool.GetNumberOfSetsAllocated() < MAX_SETS_PER_POOL) if(pool->GetNumberOfSetsAllocated() < MAX_SETS_PER_POOL)
return pool; return *pool;
} }
m_pools.emplace_back().Init(); m_pools.emplace_back(std::make_unique<DescriptorPool>())->Init();
return m_pools.back(); return *m_pools.back();
} }
void DescriptorPoolManager::Destroy() void DescriptorPoolManager::Destroy()
{ {
MLX_PROFILE_FUNCTION(); MLX_PROFILE_FUNCTION();
for(auto& pool : m_pools) for(auto& pool : m_pools)
pool.Destroy(); pool->Destroy();
m_pools.clear(); m_pools.clear();
} }
+32 -14
View File
@@ -87,15 +87,24 @@ namespace mlx
kvfSetValidationErrorCallback(&ValidationErrorCallback); kvfSetValidationErrorCallback(&ValidationErrorCallback);
kvfSetValidationWarningCallback(&WarningCallback); kvfSetValidationWarningCallback(&WarningCallback);
mlx_window_create_info info{}; std::vector<const char*> instance_extensions;
info.title = ""; VkSurfaceKHR surface = VK_NULL_HANDLE;
info.width = 1; std::unique_ptr<Window> window;
info.height = 1;
Window window(&info, true); bool is_headless = std::getenv("MLX_HEADLESS_MODE") != nullptr;
std::vector<const char*> instance_extensions = window.GetRequiredVulkanInstanceExtentions();
#ifdef MLX_PLAT_MACOS if(!is_headless)
instance_extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); {
#endif mlx_window_create_info info{};
info.title = "";
info.width = 1;
info.height = 1;
window = std::make_unique<Window>(&info, true);
instance_extensions = window->GetRequiredVulkanInstanceExtentions();
#ifdef MLX_PLAT_MACOS
instance_extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
#endif
}
m_instance = kvfCreateInstance(instance_extensions.data(), instance_extensions.size()); m_instance = kvfCreateInstance(instance_extensions.data(), instance_extensions.size());
DebugLog("Vulkan: instance created"); DebugLog("Vulkan: instance created");
@@ -103,25 +112,34 @@ namespace mlx
loader->LoadInstance(m_instance); loader->LoadInstance(m_instance);
LoadKVFInstanceVulkanFunctionPointers(); LoadKVFInstanceVulkanFunctionPointers();
VkSurfaceKHR surface = window.CreateVulkanSurface(m_instance); if(!is_headless)
{
surface = window->CreateVulkanSurface(m_instance);
m_physical_device = kvfPickGoodDefaultPhysicalDevice(m_instance, surface);
}
else
m_physical_device = kvfPickGoodPhysicalDevice(m_instance, VK_NULL_HANDLE, nullptr, 0);
m_physical_device = kvfPickGoodDefaultPhysicalDevice(m_instance, surface); Verify(m_physical_device != VK_NULL_HANDLE, "Could not find a suitable physical device");
// just for style // just for style
VkPhysicalDeviceProperties props; VkPhysicalDeviceProperties props;
vkGetPhysicalDeviceProperties(m_physical_device, &props); vkGetPhysicalDeviceProperties(m_physical_device, &props);
DebugLog("Vulkan: physical device picked '%'", props.deviceName); DebugLog("Vulkan: physical device picked '%'", props.deviceName);
const char* device_extensions[] = { VK_KHR_SWAPCHAIN_EXTENSION_NAME }; std::vector<const char*> device_extensions;
if(!is_headless)
device_extensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
VkPhysicalDeviceFeatures features{}; VkPhysicalDeviceFeatures features{};
vkGetPhysicalDeviceFeatures(m_physical_device, &features); vkGetPhysicalDeviceFeatures(m_physical_device, &features);
m_device = kvfCreateDevice(m_physical_device, device_extensions, sizeof(device_extensions) / sizeof(device_extensions[0]), &features); m_device = kvfCreateDevice(m_physical_device, device_extensions.data(), device_extensions.size(), &features);
DebugLog("Vulkan: logical device created"); DebugLog("Vulkan: logical device created");
loader->LoadDevice(m_device); loader->LoadDevice(m_device);
LoadKVFDeviceVulkanFunctionPointers(); LoadKVFDeviceVulkanFunctionPointers();
vkDestroySurfaceKHR(m_instance, surface, nullptr); if(surface != VK_NULL_HANDLE)
vkDestroySurfaceKHR(m_instance, surface, nullptr);
VkAllocationCallbacks callbacks; VkAllocationCallbacks callbacks;
callbacks.pUserData = nullptr; callbacks.pUserData = nullptr;
@@ -28,6 +28,10 @@ namespace mlx
{ {
static inline PFN_vkVoidFunction vkGetInstanceProcAddrStub(Handle context, const char* name) static inline PFN_vkVoidFunction vkGetInstanceProcAddrStub(Handle context, const char* name)
{ {
bool is_headless = std::getenv("MLX_HEADLESS_MODE") != nullptr;
if(is_headless && std::string_view(name).find("KHR") != std::string_view::npos)
return nullptr;
PFN_vkVoidFunction function = RenderCore::Get().vkGetInstanceProcAddr(static_cast<VkInstance>(context), name); PFN_vkVoidFunction function = RenderCore::Get().vkGetInstanceProcAddr(static_cast<VkInstance>(context), name);
if(!function) if(!function)
FatalError("Vulkan Loader: could not load '%'", name); FatalError("Vulkan Loader: could not load '%'", name);
@@ -37,6 +41,10 @@ namespace mlx
static inline PFN_vkVoidFunction vkGetDeviceProcAddrStub(Handle context, const char* name) static inline PFN_vkVoidFunction vkGetDeviceProcAddrStub(Handle context, const char* name)
{ {
bool is_headless = std::getenv("MLX_HEADLESS_MODE") != nullptr;
if(is_headless && std::string_view(name).find("KHR") != std::string_view::npos)
return nullptr;
PFN_vkVoidFunction function = RenderCore::Get().vkGetDeviceProcAddr(static_cast<VkDevice>(context), name); PFN_vkVoidFunction function = RenderCore::Get().vkGetDeviceProcAddr(static_cast<VkDevice>(context), name);
if(!function) if(!function)
FatalError("Vulkan Loader: could not load '%'", name); FatalError("Vulkan Loader: could not load '%'", name);
+9 -9
View File
@@ -51,7 +51,7 @@
#ifndef KBZ_8_VULKAN_FRAMEWORK_H #ifndef KBZ_8_VULKAN_FRAMEWORK_H
#define KBZ_8_VULKAN_FRAMEWORK_H #define KBZ_8_VULKAN_FRAMEWORK_H
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #if defined(KVF_IMPL_VK_NO_PROTOTYPES) && !defined(VK_NO_PROTOTYPES)
#define VK_NO_PROTOTYPES #define VK_NO_PROTOTYPES
#endif #endif
@@ -159,7 +159,7 @@ VkSampler kvfCreateSampler(VkDevice device, VkFilter filters, VkSamplerAddressMo
void kvfDestroySampler(VkDevice device, VkSampler sampler); void kvfDestroySampler(VkDevice device, VkSampler sampler);
VkBuffer kvfCreateBuffer(VkDevice device, VkBufferUsageFlags usage, VkDeviceSize size); VkBuffer kvfCreateBuffer(VkDevice device, VkBufferUsageFlags usage, VkDeviceSize size);
void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size_t size); void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size_t size, size_t src_offset, size_t dst_offset);
void kvfCopyBufferToImage(VkCommandBuffer cmd, VkImage dst, VkBuffer src, size_t buffer_offset, VkImageAspectFlagBits aspect, VkExtent3D extent); void kvfCopyBufferToImage(VkCommandBuffer cmd, VkImage dst, VkBuffer src, size_t buffer_offset, VkImageAspectFlagBits aspect, VkExtent3D extent);
void kvfDestroyBuffer(VkDevice device, VkBuffer buffer); void kvfDestroyBuffer(VkDevice device, VkBuffer buffer);
@@ -374,12 +374,12 @@ void kvfCheckVk(VkResult result);
#ifdef KVF_DESCRIPTOR_POOL_CAPACITY #ifdef KVF_DESCRIPTOR_POOL_CAPACITY
#undef KVF_DESCRIPTOR_POOL_CAPACITY #undef KVF_DESCRIPTOR_POOL_CAPACITY
#endif #endif
#define KVF_DESCRIPTOR_POOL_CAPACITY 512 #define KVF_DESCRIPTOR_POOL_CAPACITY 1024
#ifdef KVF_COMMAND_POOL_CAPACITY #ifdef KVF_COMMAND_POOL_CAPACITY
#undef KVF_COMMAND_POOL_CAPACITY #undef KVF_COMMAND_POOL_CAPACITY
#endif #endif
#define KVF_COMMAND_POOL_CAPACITY 512 #define KVF_COMMAND_POOL_CAPACITY 1024
typedef struct typedef struct
{ {
@@ -560,6 +560,7 @@ void __kvfCompleteDevice(VkPhysicalDevice physical, VkDevice device)
kvf_device->device = device; kvf_device->device = device;
kvf_device->cmd_pool = pool; kvf_device->cmd_pool = pool;
kvf_device->callbacks = NULL;
kvf_device->sets_pools = NULL; kvf_device->sets_pools = NULL;
kvf_device->sets_pools_size = 0; kvf_device->sets_pools_size = 0;
kvf_device->cmd_buffers_size = 0; kvf_device->cmd_buffers_size = 0;
@@ -1474,9 +1475,6 @@ int32_t __kvfScorePhysicalDevice(VkPhysicalDevice device, VkSurfaceKHR surface,
if(device_props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) if(device_props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
score += 1000; score += 1000;
if(!device_features.geometryShader)
return -1;
score += device_props.limits.maxImageDimension2D; score += device_props.limits.maxImageDimension2D;
score += device_props.limits.maxBoundDescriptorSets; score += device_props.limits.maxBoundDescriptorSets;
@@ -2277,7 +2275,7 @@ VkBuffer kvfCreateBuffer(VkDevice device, VkBufferUsageFlags usage, VkDeviceSize
return buffer; return buffer;
} }
void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size_t size) void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size_t size, size_t src_offset, size_t dst_offset)
{ {
KVF_ASSERT(cmd != VK_NULL_HANDLE); KVF_ASSERT(cmd != VK_NULL_HANDLE);
KVF_ASSERT(dst != VK_NULL_HANDLE); KVF_ASSERT(dst != VK_NULL_HANDLE);
@@ -2288,6 +2286,8 @@ void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size
#endif #endif
VkBufferCopy copy_region = {}; VkBufferCopy copy_region = {};
copy_region.size = size; copy_region.size = size;
copy_region.srcOffset = src_offset;
copy_region.dstOffset = dst_offset;
KVF_GET_DEVICE_FUNCTION(vkCmdCopyBuffer)(cmd, src, dst, 1, &copy_region); KVF_GET_DEVICE_FUNCTION(vkCmdCopyBuffer)(cmd, src, dst, 1, &copy_region);
} }
@@ -2543,7 +2543,7 @@ VkAttachmentDescription kvfBuildAttachmentDescription(KvfImageType type, VkForma
__KvfSwapchain* kvf_swapchain = __kvfGetKvfSwapchainFromVkSwapchainKHR(swapchain); __KvfSwapchain* kvf_swapchain = __kvfGetKvfSwapchainFromVkSwapchainKHR(swapchain);
KVF_ASSERT(kvf_swapchain != NULL); KVF_ASSERT(kvf_swapchain != NULL);
KVF_ASSERT(kvf_swapchain->images_count != 0); KVF_ASSERT(kvf_swapchain->images_count != 0);
return kvfBuildAttachmentDescription(KVF_IMAGE_COLOR, kvf_swapchain->images_format, VK_IMAGE_LAYOUT_UNDEFINED,VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, clear, VK_SAMPLE_COUNT_1_BIT); return kvfBuildAttachmentDescription(KVF_IMAGE_COLOR, kvf_swapchain->images_format, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, clear, VK_SAMPLE_COUNT_1_BIT);
} }
#endif #endif
+2865 -4178
View File
File diff suppressed because it is too large Load Diff
+10744 -19919
View File
File diff suppressed because it is too large Load Diff
+7 -11
View File
@@ -62,33 +62,29 @@ extern "C" {
#define VK_MAKE_API_VERSION(variant, major, minor, patch) \ #define VK_MAKE_API_VERSION(variant, major, minor, patch) \
((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) ((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch)))
// DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
//#define VK_API_VERSION VK_MAKE_API_VERSION(0, 1, 0, 0) // Patch version should always be set to 0 //#define VK_API_VERSION VK_MAKE_API_VERSION(0, 1, 0, 0) // Patch version should always be set to 0
// Vulkan 1.0 version number // Vulkan 1.0 version number
#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0 #define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0
// Version of this file // Version of this file
#define VK_HEADER_VERSION 319 #define VK_HEADER_VERSION 320
// Complete version of this file // Complete version of this file
#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 4, VK_HEADER_VERSION) #define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 4, VK_HEADER_VERSION)
// VK_MAKE_VERSION is deprecated, but no reason was given in the API XML
// DEPRECATED: This define is deprecated. VK_MAKE_API_VERSION should be used instead.
#define VK_MAKE_VERSION(major, minor, patch) \ #define VK_MAKE_VERSION(major, minor, patch) \
((((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) ((((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch)))
// VK_VERSION_MAJOR is deprecated, but no reason was given in the API XML
// DEPRECATED: This define is deprecated. VK_API_VERSION_MAJOR should be used instead.
#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22U) #define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22U)
// VK_VERSION_MINOR is deprecated, but no reason was given in the API XML
// DEPRECATED: This define is deprecated. VK_API_VERSION_MINOR should be used instead.
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU)
// VK_VERSION_PATCH is deprecated, but no reason was given in the API XML
// DEPRECATED: This define is deprecated. VK_API_VERSION_PATCH should be used instead.
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU)
#define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29U) #define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29U)
@@ -21784,9 +21780,9 @@ VKAPI_ATTR void VKAPI_CALL vkQueueNotifyOutOfBandNV(
// VK_ARM_data_graph is a preprocessor guard. Do not pass it to API calls. // VK_ARM_data_graph is a preprocessor guard. Do not pass it to API calls.
#define VK_ARM_data_graph 1 #define VK_ARM_data_graph 1
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDataGraphPipelineSessionARM) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDataGraphPipelineSessionARM)
#define VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM 128U
#define VK_ARM_DATA_GRAPH_SPEC_VERSION 1 #define VK_ARM_DATA_GRAPH_SPEC_VERSION 1
#define VK_ARM_DATA_GRAPH_EXTENSION_NAME "VK_ARM_data_graph" #define VK_ARM_DATA_GRAPH_EXTENSION_NAME "VK_ARM_data_graph"
#define VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM 128U
typedef enum VkDataGraphPipelineSessionBindPointARM { typedef enum VkDataGraphPipelineSessionBindPointARM {
VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM = 0, VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM = 0,
+7096 -6324
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+6423 -6936
View File
File diff suppressed because one or more lines are too long
+11804 -18187
View File
File diff suppressed because it is too large Load Diff
+5603 -9999
View File
File diff suppressed because it is too large Load Diff
+9447 -11223
View File
File diff suppressed because it is too large Load Diff
+10 -9
View File
@@ -1,10 +1,11 @@
// Copyright 2015-2025 The Khronos Group Inc. // Copyright 2015-2025 The Khronos Group Inc.
// //
// SPDX-License-Identifier: Apache-2.0 OR MIT // SPDX-License-Identifier: Apache-2.0 OR MIT
// //
// This header is generated from the Khronos Vulkan XML API Registry. // This header is generated from the Khronos Vulkan XML API Registry.
#ifndef VULKAN_HPP_MACROS_HPP #ifndef VULKAN_HPP_MACROS_HPP
#define VULKAN_HPP_MACROS_HPP #define VULKAN_HPP_MACROS_HPP
@@ -92,12 +93,11 @@
#endif #endif
#ifndef VK_USE_64_BIT_PTR_DEFINES #ifndef VK_USE_64_BIT_PTR_DEFINES
# if defined( __LP64__ ) || defined( _WIN64 ) || ( defined( __x86_64__ ) && !defined( __ILP32__ ) ) || defined( _M_X64 ) || defined( __ia64 ) || \ #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) || (defined(__riscv) && __riscv_xlen == 64)
defined( _M_IA64 ) || defined( __aarch64__ ) || defined( __powerpc64__ ) || ( defined( __riscv ) && __riscv_xlen == 64 ) #define VK_USE_64_BIT_PTR_DEFINES 1
# define VK_USE_64_BIT_PTR_DEFINES 1 #else
# else #define VK_USE_64_BIT_PTR_DEFINES 0
# define VK_USE_64_BIT_PTR_DEFINES 0 #endif
# endif
#endif #endif
// 32-bit vulkan is not typesafe for non-dispatchable handles, so don't allow copy constructors on this platform by default. // 32-bit vulkan is not typesafe for non-dispatchable handles, so don't allow copy constructors on this platform by default.
@@ -259,7 +259,7 @@ namespace VULKAN_HPP_NAMESPACE
{ {
namespace detail namespace detail
{ {
class DispatchLoaderDynamic; class DispatchLoaderDynamic;
#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER ) #if !defined( VULKAN_HPP_DEFAULT_DISPATCHER )
# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 # if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
@@ -323,4 +323,5 @@ namespace VULKAN_HPP_NAMESPACE
# define VULKAN_HPP_RAII_CREATE_NOEXCEPT # define VULKAN_HPP_RAII_CREATE_NOEXCEPT
#endif #endif
#endif
#endif
+23441 -27281
View File
File diff suppressed because it is too large Load Diff
+576 -667
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+49940 -58472
View File
File diff suppressed because one or more lines are too long
+5269 -5586
View File
File diff suppressed because it is too large Load Diff
+32
View File
@@ -37,6 +37,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== ENUMs === //=== ENUMs ===
//============= //=============
#if defined( VULKAN_VIDEO_CODEC_H264STD_H_ )
//=== vulkan_video_codec_h264std === //=== vulkan_video_codec_h264std ===
enum class H264ChromaFormatIdc enum class H264ChromaFormatIdc
@@ -185,7 +186,9 @@ namespace VULKAN_HPP_NAMESPACE
ePrecoded = STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED, ePrecoded = STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED,
eInvalid = STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID eInvalid = STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ )
//=== vulkan_video_codec_h264std_decode === //=== vulkan_video_codec_h264std_decode ===
enum class DecodeH264FieldOrderCount enum class DecodeH264FieldOrderCount
@@ -194,7 +197,9 @@ namespace VULKAN_HPP_NAMESPACE
eBottom = STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM, eBottom = STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM,
eInvalid = STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID eInvalid = STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_H265STD_H_ )
//=== vulkan_video_codec_h265std === //=== vulkan_video_codec_h265std ===
enum class H265ChromaFormatIdc enum class H265ChromaFormatIdc
@@ -273,7 +278,9 @@ namespace VULKAN_HPP_NAMESPACE
eExtendedSar = STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR, eExtendedSar = STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR,
eInvalid = STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID eInvalid = STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_VP9STD_H_ )
//=== vulkan_video_codec_vp9std === //=== vulkan_video_codec_vp9std ===
enum class VP9Profile enum class VP9Profile
@@ -342,7 +349,9 @@ namespace VULKAN_HPP_NAMESPACE
eRgb = STD_VIDEO_VP9_COLOR_SPACE_RGB, eRgb = STD_VIDEO_VP9_COLOR_SPACE_RGB,
eInvalid = STD_VIDEO_VP9_COLOR_SPACE_INVALID eInvalid = STD_VIDEO_VP9_COLOR_SPACE_INVALID
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_AV1STD_H_ )
//=== vulkan_video_codec_av1std === //=== vulkan_video_codec_av1std ===
enum class AV1Profile enum class AV1Profile
@@ -502,11 +511,13 @@ namespace VULKAN_HPP_NAMESPACE
eReserved = STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_RESERVED, eReserved = STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_RESERVED,
eInvalid = STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_INVALID eInvalid = STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_INVALID
}; };
#endif
//=============== //===============
//=== STRUCTS === //=== STRUCTS ===
//=============== //===============
#if defined( VULKAN_VIDEO_CODEC_H264STD_H_ )
//=== vulkan_video_codec_h264std === //=== vulkan_video_codec_h264std ===
struct H264SpsVuiFlags struct H264SpsVuiFlags
@@ -960,7 +971,9 @@ namespace VULKAN_HPP_NAMESPACE
int8_t second_chroma_qp_index_offset = {}; int8_t second_chroma_qp_index_offset = {};
const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ScalingLists * pScalingLists = {}; const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ScalingLists * pScalingLists = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ )
//=== vulkan_video_codec_h264std_decode === //=== vulkan_video_codec_h264std_decode ===
struct DecodeH264PictureInfoFlags struct DecodeH264PictureInfoFlags
@@ -1137,7 +1150,9 @@ namespace VULKAN_HPP_NAMESPACE
uint16_t reserved = {}; uint16_t reserved = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<int32_t, STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE> PicOrderCnt = {}; VULKAN_HPP_NAMESPACE::ArrayWrapper1D<int32_t, STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE> PicOrderCnt = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ )
//=== vulkan_video_codec_h264std_encode === //=== vulkan_video_codec_h264std_encode ===
struct EncodeH264WeightTableFlags struct EncodeH264WeightTableFlags
@@ -1688,7 +1703,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264DisableDeblockingFilterIdc::eDisabled; VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264DisableDeblockingFilterIdc::eDisabled;
const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264WeightTable * pWeightTable = {}; const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264WeightTable * pWeightTable = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_H265STD_H_ )
//=== vulkan_video_codec_h265std === //=== vulkan_video_codec_h265std ===
struct H265DecPicBufMgr struct H265DecPicBufMgr
@@ -2805,7 +2822,9 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ScalingLists * pScalingLists = {}; const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ScalingLists * pScalingLists = {};
const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PredictorPaletteEntries * pPredictorPaletteEntries = {}; const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PredictorPaletteEntries * pPredictorPaletteEntries = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ )
//=== vulkan_video_codec_h265std_decode === //=== vulkan_video_codec_h265std_decode ===
struct DecodeH265PictureInfoFlags struct DecodeH265PictureInfoFlags
@@ -2980,7 +2999,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH265ReferenceInfoFlags flags = {}; VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH265ReferenceInfoFlags flags = {};
int32_t PicOrderCntVal = {}; int32_t PicOrderCntVal = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ )
//=== vulkan_video_codec_h265std_encode === //=== vulkan_video_codec_h265std_encode ===
struct EncodeH265WeightTableFlags struct EncodeH265WeightTableFlags
@@ -3513,7 +3534,9 @@ namespace VULKAN_HPP_NAMESPACE
int32_t PicOrderCntVal = {}; int32_t PicOrderCntVal = {};
uint8_t TemporalId = {}; uint8_t TemporalId = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_VP9STD_H_ )
//=== vulkan_video_codec_vp9std === //=== vulkan_video_codec_vp9std ===
struct VP9ColorConfigFlags struct VP9ColorConfigFlags
@@ -3772,7 +3795,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, STD_VIDEO_VP9_MAX_SEGMENTS> FeatureEnabled = {}; VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, STD_VIDEO_VP9_MAX_SEGMENTS> FeatureEnabled = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper2D<int16_t, STD_VIDEO_VP9_MAX_SEGMENTS, STD_VIDEO_VP9_SEG_LVL_MAX> FeatureData = {}; VULKAN_HPP_NAMESPACE::ArrayWrapper2D<int16_t, STD_VIDEO_VP9_MAX_SEGMENTS, STD_VIDEO_VP9_SEG_LVL_MAX> FeatureData = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ )
//=== vulkan_video_codec_vp9std_decode === //=== vulkan_video_codec_vp9std_decode ===
struct DecodeVP9PictureInfoFlags struct DecodeVP9PictureInfoFlags
@@ -3885,7 +3910,9 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9LoopFilter * pLoopFilter = {}; const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9LoopFilter * pLoopFilter = {};
const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9Segmentation * pSegmentation = {}; const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9Segmentation * pSegmentation = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_AV1STD_H_ )
//=== vulkan_video_codec_av1std === //=== vulkan_video_codec_av1std ===
struct AV1ColorConfigFlags struct AV1ColorConfigFlags
@@ -4725,7 +4752,9 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ColorConfig * pColorConfig = {}; const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ColorConfig * pColorConfig = {};
const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TimingInfo * pTimingInfo = {}; const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TimingInfo * pTimingInfo = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ )
//=== vulkan_video_codec_av1std_decode === //=== vulkan_video_codec_av1std_decode ===
struct DecodeAV1PictureInfoFlags struct DecodeAV1PictureInfoFlags
@@ -4959,7 +4988,9 @@ namespace VULKAN_HPP_NAMESPACE
uint8_t OrderHint = {}; uint8_t OrderHint = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, STD_VIDEO_AV1_NUM_REF_FRAMES> SavedOrderHints = {}; VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, STD_VIDEO_AV1_NUM_REF_FRAMES> SavedOrderHints = {};
}; };
#endif
#if defined( VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ )
//=== vulkan_video_codec_av1std_encode === //=== vulkan_video_codec_av1std_encode ===
struct EncodeAV1DecoderModelInfo struct EncodeAV1DecoderModelInfo
@@ -5372,6 +5403,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, 3> reserved1 = {}; VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, 3> reserved1 = {};
const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1ExtensionHeader * pExtensionHeader = {}; const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1ExtensionHeader * pExtensionHeader = {};
}; };
#endif
} // namespace VULKAN_HPP_VIDEO_NAMESPACE } // namespace VULKAN_HPP_VIDEO_NAMESPACE
} // namespace VULKAN_HPP_NAMESPACE } // namespace VULKAN_HPP_NAMESPACE
+3 -3
View File
@@ -1,6 +1,6 @@
-- Global settings -- Global settings
add_requires("libsdl", { configs = { sdlmain = false } }) add_requires("libsdl2", { configs = { sdlmain = false } })
add_rules("mode.debug", "mode.release", "mode.releasedbg") add_rules("mode.debug", "mode.release", "mode.releasedbg")
set_languages("cxx20", "c11") set_languages("cxx20", "c11")
@@ -63,7 +63,7 @@ target("mlx")
add_files("runtime/Sources/**.cpp") add_files("runtime/Sources/**.cpp")
add_packages("libsdl") add_packages("libsdl2")
if is_mode("debug") then if is_mode("debug") then
add_defines("DEBUG") add_defines("DEBUG")
@@ -98,5 +98,5 @@ target("Test")
add_defines("SDL_MAIN_HANDLED") add_defines("SDL_MAIN_HANDLED")
add_packages("libsdl") add_packages("libsdl2")
target_end() target_end()